我创建了一个输出类型为 netmodule 的 C# 代码。这是在 C++ 代码中使用的。
我想创建一个已经加载的同一个程序集的对象。但是,在一个单独的 AppDomain 中。但是这样做时,我无法加载程序集以使用 CreateInstanceAndUnwrap 方法创建对象。当尝试使用独立的 C# 代码执行相同操作时,它可以正常工作。
C++:
TestClass __gc *testObj;
testObj = AppDomainProcessor::getInstance()->newTestObj((LPWSTR)domName);
//testObj->otherOperation...
C#
namespace TestNS {
public class AppDomainProcessor {
...
public TestClass newTestObj(String domName) {
AppDomain appDomain = AppDomain.CreateDommain(domName);
TestClass testObj = (TestClass)appDomain.CreateInstanceAndUnwrap(typeof(TestClass).Assembly.FullName,typeof(TestClass).FullName);
//Could not load file or assembly 'MyManaged, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified
return testObj;
}
...
}
public class TestClass : MarshalByRefObject {
...
}
}
我打印了 AssemblyName 并发现它是从 C++ 代码编译的 dll 的名称。从独立 C# 尝试时,它是 exe 的名称。
这是一起使用 C++ 和 C# 时创建 AppDomain 的正确方法吗?或者我在创建 AppDomain 时犯了任何错误。请协助。