1

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

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";
4

2 回答 2

2

请参阅这个 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>
于 2012-01-06T19:13:32.517 回答
1

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

于 2012-01-06T19:33:55.373 回答