.net 如何强制从何处加载程序集?

.net 如何强制从何处加载程序集?,.net,deployment,assemblies,assembly-resolution,.net,Deployment,Assemblies,Assembly Resolution,我开发了一个控制台实用程序,可以对服务器应用程序执行一些操作。由于我正在使用的服务器应用程序的性质,我需要在服务器上执行此实用程序 问题是,该实用程序引用的是以前部署到服务器GAC的公共DLL。自从公共DLL部署以来,它已被更新,我的实用程序依赖于这些更新。由于公司关于部署的政策,我无法更新GAC中的DLL 默认情况下,我的工具将在GAC中使用过时的DLL。是否有一种方法可以强制它使用更新的DLL(例如,通过指定文件系统上的路径)?您可能需要查看该事件 编辑:仅当常规程序集解析失败时才会触发该事

我开发了一个控制台实用程序,可以对服务器应用程序执行一些操作。由于我正在使用的服务器应用程序的性质,我需要在服务器上执行此实用程序

问题是,该实用程序引用的是以前部署到服务器GAC的公共DLL。自从公共DLL部署以来,它已被更新,我的实用程序依赖于这些更新。由于公司关于部署的政策,我无法更新GAC中的DLL


默认情况下,我的工具将在GAC中使用过时的DLL。是否有一种方法可以强制它使用更新的DLL(例如,通过指定文件系统上的路径)?

您可能需要查看该事件


编辑:仅当常规程序集解析失败时才会触发该事件,因此它不符合您的需要。

assembly类具有一些从特定位置加载程序集的方法

Assembly.LoadFrom
有一些重载


编辑:有一种方法可以通过配置文件指定在何处查找特定的程序集版本。我记不清了。

更新的DLL没有新的版本号吗?我希望,如果您强制引用使用正确的版本号,它应该选择本地版本号。

不幸的是,GAC倾向于打王牌-但是如果您更改了版本,那么GAC解析应该失败(只要您在IDE中将“特定版本”设置为true),允许它加载本地版本吗?

尝试使用app.config中的元素,正如foson建议的那样,在控制台的配置文件中使用codebase。示例如下所示(适当更改publicKeyToken、名称、版本和href)



因此,这是强制CLR将对公共DLL的调用从GAC重定向到位于href位置的版本的最简单方法。更新后的公共dll应具有强名称,就像GAC中的dll一样,具有相同的名称、区域性、publickeytoken,但为新版本。因此,唯一的更改是在控制台的配置文件中。您不需要更改控制台源代码中的引用。您只需继续使用现有的控制台应用程序即可。

只有当它失败时才会出现这种情况;所以,如果GAC中的版本与name/version/signature匹配,您将不会看到此事件。不过,不确定是否有理由投反对票。为你平衡这一点-如果您有关于配置文件方法的更多信息,那就太好了。程序集绑定和程序集基标记。希望能有帮助
<runtime> 
 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
  <dependentAssembly> 
     <assemblyIdentity name="myCommonDll" publicKeyToken="32ab4ba45e0a69a1" culture="neutral" />
     <codeBase version="2.0.0.0" href="file://C:\Users\djpiter\Documents/myCommon.dll"/>
  </dependentAssembly> 
 </assemblyBinding> 
</runtime>