ApplicationBase
이있는 AppDomain
을 만든 다음이 ApplicationBase
외부의 어셈블리를 도메인으로로드하고 있습니다.ApplicationBase와 AppDomains간에 인스턴스를 전달할 때 예외
CreateInstanceFromAndUnwrap
으로 MarshalByRef 형식을 인스턴스화하는 것은 정상적으로 작동하며 사용자 지정 형식의 인스턴스를 인수로 전달할 때까지 해당 형식을 사용할 수도 있습니다. this
인수가 동일한 어셈블리에서 경우에도,이 예외가 :
System.ArgumentException: Object type cannot be converted to target type.
내가 ApplicationBase
을 설정하지 않는 경우 문제가 사라집니다. 그러나 나는 이것을 설정해야한다. 왜 이런 일이 일어나는 걸까요? 이 문제를 어떻게 해결할 수 있습니까? 내가 대신 작동 MarshalByRef의 직렬화 StringHolder
을 할 때
using System;
using System.Linq;
namespace adtest
{
class Program
{
static void Main(string[] args)
{
AppDomainSetup ads = new AppDomainSetup
{
ApplicationBase = "C:\\", // just to have it be different.
ApplicationName = "test server"
};
AppDomain ad = AppDomain.CreateDomain(
ads.ApplicationName, null, ads);
ReverseFactory rf = (ReverseFactory)ad.CreateInstanceFromAndUnwrap(
typeof(ReverseFactory).Assembly.Location,
typeof(ReverseFactory).FullName);
string res = rf.Reverse(
new StringHolder("Hello from Bizarro Domain"));
Console.WriteLine(res);
}
}
public class ReverseFactory : MarshalByRefObject
{
public string Reverse(StringHolder s)
{
return new string(s.Value.Reverse().ToArray());
}
}
public class StringHolder : MarshalByRefObject
{
public string Value { get; set; }
public StringHolder(string s) { Value = s; }
}
}
: 여기에 전체 테스트 케이스이다. 그러나이 실제 테스트보다 훨씬 큰 코드는 직렬화 가능 객체를 사용할 수 없습니다.
GAC에 물건을 넣는 것은 문제를 어떻게 해결했는지입니다. –