我有以下程序
private static IMyInterface OpenInstance(
string assemblyPath,
string classType,
string assemblyName,
out AppDomain domainInstall)
{
IMyInterface interface = null;
AppDomainSetup domaininfo = new AppDomainSetup();
domaininfo.ApplicationBase = assemblyPath;
domainInstall = AppDomain.CreateDomain("PathInstall", null, domaininfo);
ObjectHandle handleService = null;
try
{
handleService = Activator.CreateInstance(
domainInstall,
assemblyName,
classType,
true,
System.Reflection.BindingFlags.CreateInstance,
null,
new Object[] { assemblyName},
System.Globalization.CultureInfo.CurrentCulture,
null, null);
Object myobject = handleService.Unwrap();
interface = (IMyInterface )myobject ;
}
catch (Exception ex)
{
...
}
return interface ;
}
此过程可以正常工作,但是在安装自定义操作期间调用它时。
换句话说,如果我在自己的 Install(...) 覆盖中调用我的 OpenInstance(...) 过程:
public override void Install(IDictionary stateServer)
在我的 Installer 扩展类中定义:
[RunInstaller(true)]
public class SpheresServiceInstaller : Installer
当我尝试将展开的对象转换为所需类型时出现异常:
interface = (IMyInterface)myobject ;
异常详情:
- 类型:System.InvalidCastException
- 消息:无法将透明代理转换为类型“IMyInterface”。
我想了解为什么该程序一直有效,但在这种特定情况下。
细节
我一步一步地遵循对象创建过程,一切似乎都很好,该对象是由 Activator.CreateInstance 过程很好地创建的。
Activator.CreateInstance 使用的程序集已经存在于文件系统中。
具体程序集'assemblyName on the source code)是安装程序刚刚创建的窗口服务。