我正在实现一个基于 Windows 工作流基础的 Microsoft Speech Server 应用程序。该应用程序管理其他子应用程序 - 用户调用并且管理器加载包含正确应用程序的程序集并调用工作流。
我面临的问题是语音服务或 iis 喜欢将程序集锁定到内存中,防止我覆盖 dll。这使得调试应用程序很痛苦,但一旦应用程序部署到生产环境,这也是完全不可接受的。
无法手动卸载单个特定程序集 - 程序集仅在其父应用程序域卸载时才被卸载。
因此,我尝试使用 .net 远程创建一个新的应用程序域,将程序集加载到该域中,通过代理创建工作流对象,然后我想传递该代理。
这是我要创建的类型的代码。它在我要加载的程序集中:
public class typeContainer : MarshalByRefObject
{
public static Type workflowType = typeof(mainWorkflow);
}
这是管理器中的代码:
AppDomain newDomain = AppDomain.CreateDomain("newdomain");
System.Runtime.Remoting.ObjectHandle oh = newDomain.CreateInstanceFrom(
@"FullPathToAssembly",
"namespace.typeContainer");
object unwrapped = oh.Unwrap();
所以问题是,我怎样才能在管理器中访问 typeContainer.workflowType ?oh.Unwrap() 产生一种 _TransparentProxy。