AppDomain ExecuteAssembly无法加载文件或程序集



我有一个加载另一个应用程序(app2)的应用程序(app1),如下所示:

this._appDomain.ExecuteAssembly(assemblyName);

当那行执行时,我得到了这个错误:

无法加载文件或程序集Foo。。。

App2引用了Foo。如果我在app1中添加对Foo的引用,它就会起作用。问题是我不希望app1引用Foo。App1的主要目的是在网络共享上检测app2的新版本,卸载app2,复制新的二进制文件,然后使用上面的行再次启动app2。之后,如果app1中有旧的Foo,那么app2将在自己的运行目录中使用它而不是Foo。

我怎么能让app2只引用Foo,而app1仍然会加载app2而没有那个错误呢?

注意:我使用的是影子复制,当app1引用Foo时,它就可以工作了。

appDomainSetup.ShadowCopyFiles   = "true";

看看这个SO问题:如何在.NET运行时将文件夹添加到程序集搜索路径?

或者,您可以在配置中添加<codebase>标记,指定在哪里搜索程序集,并添加对app2依赖项的引用。

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="MyAssembly2"  culture="neutral" publicKeyToken="307041694a995978"/>
            <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

请参阅AppDomainSetup.ApplicationBase。您可以通过此属性指定应用程序域的基本应用程序目录。ApplicationBase本质上是程序集探测的起点。此外,您可以使用AppDomainSetup.PrivateBinPath指定其他专用bin路径。这允许探测搜索其他目录。MSDN页面中有一些代码示例。

相关内容

  • 没有找到相关文章

最新更新