C# 无法将正在执行的程序集加载到新的AppDomain,FileNotFoundException
我正在尝试在新的AppDomain中托管一个文本模板类代理 我有一些执行类似操作的旧脚本代码,其中包含以下工作代码:C# 无法将正在执行的程序集加载到新的AppDomain,FileNotFoundException,c#,appdomain,C#,Appdomain,我正在尝试在新的AppDomain中托管一个文本模板类代理 我有一些执行类似操作的旧脚本代码,其中包含以下工作代码: _ScriptAppDomain = AppDomain.CreateDomain(scriptDomainFriendlyName); _ScriptProxy = (IScriptEngineProxy)_ScriptAppDomain.CreateInstanceAndUnwrap( Assembly.GetExecutingAssembly().FullName,
_ScriptAppDomain = AppDomain.CreateDomain(scriptDomainFriendlyName);
_ScriptProxy = (IScriptEngineProxy)_ScriptAppDomain.CreateInstanceAndUnwrap(
Assembly.GetExecutingAssembly().FullName,
"LVK.Scripting.ScriptEngineProxy");
但是,当我在我的新类中尝试这个时
_TemplateDomain = AppDomain.CreateDomain(templateDomainFriendlyName);
_TemplateProxy = (ITemplateProxy)_TemplateDomain.CreateInstanceAndUnwrap(
Assembly.GetExecutingAssembly().FullName,
"TextTemplate.TemplateProxy");
我刚刚得到“FileNotFoundException”,包含以下详细信息:
无法加载文件或程序集“TextTemplate,Version=1.0.0,Culture=neutral,PublicKeyToken=bb70a2e62a722ace”或其依赖项之一。系统找不到指定的文件
我错过了什么
基本上,我在TextTemplate命名空间(和程序集)中有一个模板类,它试图将TemplateProxy类(从MarshalByRefObject降序)加载到新的appdomain中,但我的主程序集似乎没有加载到此域中
如果我使用旧的代码,这是可行的,但新的代码不行,但我看不出有什么不同
以下是一些更详细的信息:
- 装配未在GAC注册(旧的装配也未注册,它可以正常工作)
- 我没有覆盖任何AssemblyResolve事件(旧事件也没有覆盖,它可以正常工作)
如果需要的话,我并不反对处理AssemblyResolve事件。我只是觉得我的旧代码工作起来很奇怪,而这却不行。假设您的程序集与当前应用程序库位于同一目录中,请尝试指定应用程序库:
AppDomain.CreateDomain(templateDomainFriendlyName, null,
new AppDomainSetup
{
ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase
});
假设程序集与当前应用程序库位于同一目录中,请尝试指定应用程序库:
AppDomain.CreateDomain(templateDomainFriendlyName, null,
new AppDomainSetup
{
ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase
});
如果您不知道自己在做什么,创建新域的最佳方法是复制当前域的所有设置,如下所示:
var newDomain = AppDomain.CreateDomain("NAME",
AppDomain.CurrentDomain.Evidence,
AppDomain.CurrentDomain.SetupInformation);
我也遇到过类似的问题,制作一个副本可以帮我解决这些问题如果您不知道自己在做什么,创建新域的最佳方法是从当前域复制所有设置,如下所示:
var newDomain = AppDomain.CreateDomain("NAME",
AppDomain.CurrentDomain.Evidence,
AppDomain.CurrentDomain.SetupInformation);
我也有类似的问题,制作一个副本可以帮我解决这些问题您是否添加了用于程序集解析的代码?也许这可以帮助您获得更多详细信息。TextTemplate程序集是否已部署到GAC?@Sam,不,不是,但旧程序集也不是。@LexRema,不,我没有,旧程序集中也没有。是否需要重写AppDomain.AssemblyResolve事件?我认为异常消息中的关键点是“或其依赖项之一”。是否可以检查TextTemplate程序集依赖项的可用性?是否添加了用于程序集解析的代码?也许这可以帮助您获得更多详细信息。TextTemplate程序集是否已部署到GAC?@Sam,不,不是,但旧程序集也不是。@LexRema,不,我没有,旧程序集中也没有。是否需要重写AppDomain.AssemblyResolve事件?我认为异常消息中的关键点是“或其依赖项之一”。你能检查一下TextTemplate程序集的依赖项的可用性吗?好的,有了它,这部分代码运行起来没有问题,但现在我在编译我的模板的代码中得到了“编译器可执行文件csc.exe找不到”。我试着把所有的东西都简化成一个小程序,但这很管用,所以我会试着把它扩展回去看看问题出在哪里。这确实是个问题,编译器错误是完全不同的。好吧,有了它,那部分代码运行起来没有问题,但现在我得到了“编译器可执行文件csc.exe找不到”在编译我的模板的代码中。我试着把所有的东西都简化成一个小程序,但这很管用,所以我会试着把它扩展回去看看问题出在哪里。这确实是问题所在,编译器错误是完全不同的。