.NET中的程序集重定向

时间:2010-02-24 07:56:31

标签: c# .net

我有C#.net exe,我在其中添加对第三方dll的引用。

这些第三方dll是在GAC注册的强名称程序集。

我使用第三方dll(比如7.0版)编译我的程序。

当我尝试在一台机器中注册我的C#.net exe程序时,该机器在GAC注册了第三方dll(比如7.0以上版本)。

如果在我使用目标机器中存在的dll版本重新编译我的C#项目时,在少数机器中随机失败,说明“无法找到程序集版本7.0类型未注册”,它将成功运行..

注意:  一个。假设项目最初使用汇编版本7.0.4.82和&amp ;;编译。试图在11.0.367.0中运行。  湾Test.Framework,Test.Core是引用的程序集。

要解决的步骤:

使用以下app.config文件尝试了程序集重定向技术。

  

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" >

  <dependentAssembly>

    <assemblyIdentity

            name="Test.Framework"

            publicKeyToken="ebf6b2ff4d0a08aa" culture ="neutral"/>

    <bindingRedirect oldVersion="7.0.4.82"

                         newVersion="11.0.367.0" />

    <publisherPolicy apply="no" />

  </dependentAssembly>

  <dependentAssembly>

    <assemblyIdentity

            name="Test.Core"

            publicKeyToken="ebf6b2ff4d0a08aa" culture ="neutral"/>

    <bindingRedirect oldVersion="7.0.4.82"

                         newVersion="11.0.367.0" />

    <publisherPolicy apply="no" />

  </dependentAssembly>     


</assemblyBinding>

请建议我解决此问题的一些步骤。

先谢谢。

2 个答案:

答案 0 :(得分:4)

我的建议:

  1. 启用 Fusion日志记录(请参阅here
  2. 不要依赖GAC中安装的程序集。不要在GAC的VS项目中引用它们,而是将它们添加到单独目录中的源代码存储库中,然后从那里引用它们。这样可以控制您的应用使用的第三方程序集版本。看看我们是如何做到的here

答案 1 :(得分:0)

为什么不直接在应用程序中分发所需的版本? Create一个安装(部署),用于在GAC中注册所需的版本。 DLL供应商可能会提供您可以放入安装的合并模块。

或者只使用Igor建议的DLL的本地副本。