我有一个应用程序(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";
答案 0 :(得分:2)
请参阅此问题:How to add folder to assembly search path at runtime in .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>
答案 1 :(得分:1)
见AppDomainSetup.ApplicationBase 。您可以通过此属性为应用程序域指定基本应用程序目录。 ApplicationBase本质上是程序集探测的起点。此外,您可以使用AppDomainSetup.PrivateBinPath指定其他专用bin路径。这允许探测搜索其他目录。 MSDN页面中有代码示例。