Я пытался заставить следующий код работать (все определяется в том же блоке):
namespace SomeApp{
public class A : MarshalByRefObject
{
public byte[] GetSomeData() { // }
}
public class B : MarshalByRefObject
{
private A remoteObj;
public void SetA(A remoteObj)
{
this.remoteObj = remoteObj;
}
}
public class C
{
A someA = new A();
public void Init()
{
AppDomain domain = AppDomain.CreateDomain("ChildDomain");
string currentAssemblyPath = Assembly.GetExecutingAssembly().Location;
B remoteB = domain.domain.CreateInstanceFromAndUnwrap(currentAssemblyPath,"SomeApp.B") as B;
remoteB.SetA(someA); // this throws an ArgumentException "Object type cannot be converted to target type."
}
}
}
То, что я пытаюсь сделать, передать ссылку ',' экземпляр, созданный в первом AppDomain к дочернему домену и иметь дочерний домен, выполняет метод на первом домене. В некоторой точке на коде 'B' я собираюсь звонить 'remoteObj. GetSomeData ()'. Это должно быть сделано, потому что 'байт []' из метода 'GetSomeData' должен быть 'вычислен' на первый appdomain. Что я должен сделать для предотвращения исключения, или что я могу сделать для достижения того же результата?
Я могу продублировать проблему, и, похоже, она связана с TestDriven.net и / или xUnit.net . Если я запускаю C.Init () в качестве метода тестирования, я получаю то же сообщение об ошибке. Однако, если я запускаю C.Init () из консольного приложения, я не получаю исключения.
Вы видите то же самое при запуске C.Init () из модульного теста?
Редактировать: Я также могу продублировать проблему с помощью NUnit и TestDriven.net. Я также могу продублировать ошибку, используя бегун NUnit вместо TestDriven.net. Таким образом, проблема, похоже, связана с запуском этого кода через среду тестирования, хотя я не уверен, почему.