C# NET中的程序集重定向

C# NET中的程序集重定向,c#,.net,C#,.net,我有一个C.net exe,我在其中添加了对第三方dll的引用 这些第三方dll是在GAC中注册的强名称程序集 我用第三方dll的SAY版本7.0编译我的程序 当我试图在一台拥有第三方dll的机器上注册我的C.net exe程序时,可能会在GAC中注册任何高于7.0的版本 如果在少数机器上随机失败,说明找不到程序集版本7.0,则当我使用目标机器中的dll版本重新编译C项目时,类型未再次注册。该项目已成功运行 注: A.假设该项目最初是使用汇编版本7.0.4.82编译的,并尝试在11.0.367.

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

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

我用第三方dll的SAY版本7.0编译我的程序

当我试图在一台拥有第三方dll的机器上注册我的C.net exe程序时,可能会在GAC中注册任何高于7.0的版本

如果在少数机器上随机失败,说明找不到程序集版本7.0,则当我使用目标机器中的dll版本重新编译C项目时,类型未再次注册。该项目已成功运行

注: A.假设该项目最初是使用汇编版本7.0.4.82编译的,并尝试在11.0.367.0中运行。 BTest.Framework、Test.Core是引用的程序集

为解决下列问题而采取的步骤:

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

请给我一些解决方法

提前感谢。

我的建议:

打开Fusion日志记录,请参见 不要依赖安装在GAC中的组件。不要在GAC的VS项目中引用它们,而是将它们添加到单独目录中的源代码存储库中,然后从那里引用。这样,您就可以控制应用程序使用的第三方程序集的版本。看看我们是怎么做到的。 我的建议是:

打开Fusion日志记录,请参见 不要依赖安装在GAC中的组件。不要在GAC的VS项目中引用它们,而是将它们添加到单独目录中的源代码存储库中,然后从那里引用。这样,您就可以控制应用程序使用的第三方程序集的版本。看看我们是怎么做到的。
为什么不将所需的版本与应用程序一起分发?在GAC中注册所需版本的安装部署。DLL供应商可能会提供一个合并模块,您可以直接放入安装中


或者,按照Igor的建议,只使用DLL的本地副本

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


或者,按照Igor的建议,只使用DLL的本地副本

请发布您获得的完整异常堆栈跟踪。请发布您获得的完整异常堆栈跟踪。
<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>