我们面临着一种独特而痛苦的局面。传统上,我们一直使用GAC和策略文件来控制.NET应用程序的DLL版本。但是,我们有一个非常独特的情况,并且遇到了重大问题,因为我们的一些应用程序不尊重策略文件。最具体的是引用具有策略文件的.NET 1.1 dll的.NET 2.0应用程序。
我们在Windows应用程序以及大量Web应用程序中动态运行(通过反射加载)项目的混合组合。我们希望转向更多的“集中式DLL存储”而不是担心GAC版本。但我们似乎无法找到一种方法来告诉我们的应用程序“在这里寻找任何DLL”。
查看一些程序集信息节点(http://msdn.microsoft.com/en-us/library/twy1dw1e.aspx),我们可以在那里找到一部分,但我们必须定义应该查找的每个和每个DLL,这是不可能的,因为我们有大约200个不同的应用程序当我们更新共享DLL的版本时,这将需要定期的web.config更新。
有没有人对如何移动DLL引用有一个好主意? CopyLocal不是一个选项,因为我们有时需要应用程序使用新版本的共享DLL。 GAC,至少现在,也不是一个真正的选择。
答案 0 :(得分:1)
您可以在app.config中使用CodeBase hints,
<?xml version="1.0"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MyDll" />
<codeBase version="1.0.1000.20000" href="file:///c:\SharedDlls" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
如果你想在Machine.Config文件中使用它,你的DLL需要一个强大的名称(如果你来自GAC世界并且微软认证需要它,那么对你来说应该不是问题。)
这是一个link on an MSDN blog,可以提供更深入的建议。