作者:121016710_ddc112_531_661_325 | 来源:互联网 | 2023-01-31 16:37
无法将执行程序集加载到新的AppDomain,FileNotFoundException我试图在新的AppDomain中托管文本模板类代理。我有一些旧的脚本代码,它们执行类似的操作
无法将执行程序集加载到新的AppDomain,FileNotFoundException
我试图在新的AppDomain中托管文本模板类代理。
我有一些旧的脚本代码,它们执行类似的操作,包含以下代码:
_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.0,Culture = neutral,PublicKeyToken = bb70a2e62a722ace’或其依赖项之一。 该系统找不到指定的文件。
我错过了什么?
基本上,我在TextTemplate命名空间(和程序集)中有一个Template类,它试图将TemplateProxy类(从MarshalByRefObject降序)加载到新的appdomain中,但看起来我的主程序集没有加载到这个域中。
如果我使用较旧的代码,但不使用这个新代码,这是有效的,但我无法发现差异。
这里有一些更多的细节:
如果需要的话,我不反对处理AssemblyResolve事件。 我发现我的旧代码工作很奇怪,但事实并非如此。
假设您的程序集与当前应用程序库位于同一目录中,请尝试指定Application Base:
AppDomain.CreateDomain(templateDomainFriendlyName, null, new AppDomainSetup { ApplicatiOnBase= AppDomain.CurrentDomain.SetupInformation.ApplicationBase });
如果您不知道自己在做什么,创建新域的最佳方法是从当前设置中复制所有设置,如下所示:
var newDomain = AppDomain.CreateDomain("NAME", AppDomain.CurrentDomain.Evidence, AppDomain.CurrentDomain.SetupInformation);
我有类似的问题,并制作副本为我解决它们
上述就是C#学习教程:无法将执行程序集加载到新的AppDomain,FileNotFoundException分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记