作为BaaS项目的一部分,我需要动态执行来自" guest"的代码。部件。我已尝试过其他类似问题的所有示例和答案,包括AppDomainToolKit方法,但没有运气。
与插件方法类似,我通过将相关程序集复制到主机应用程序的bin路径中获得了积极的结果。但是,对于当前情况,这是不可能的:
到目前为止,我的最新一段代码在
之下 // ClassLibrary1.dll and ClassLibrary2.dll are in the same directory, both are marked as Serializable
var binPath = @"C:\AssemblyDemo\ClassLibrary1\bin\Debug\";
var lib1Path = binPath + "ClassLibrary1.dll";
var lib2Path = binPath + "ClassLibrary2.dll";
var setup = new AppDomainSetup();
setup.ApplicationBase = binPath;
AppDomain domain = AppDomain.CreateDomain("domainname", null, setup);
ObjectHandle handle = domain.CreateInstanceFrom(lib1Path, "ClassLibrary1.Class1");
var unwrap = handle.Unwrap();
var m1 = unwrap.GetType().GetMethod("Method1");
var result = m1.Invoke(unwrap, null);
handle.Unwrap()
抛出异常Type is not resolved for member 'ClassLibrary1.Class1,ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
答案 0 :(得分:2)
如果只想在临时AppDomain中加载程序集,则无法在主域中调用Unwrap
。 Unwrap
也会在那里加载类型。您必须将对象的所有访问权限从临时程序集移动到临时AppDomain。您可以使用AppDomain.DoCallBack
或您在子域中实例化并从父域调用的自定义MarshalByRef
类来执行此操作。