定位程序集的非特定版本

时间:2010-07-19 22:57:16

标签: c# assemblies dependencies

我试图不针对某个特定版本的dll,但我不太确定如何。 我已将程序集属性上的选项“特定版本”设置为false,但是如果我尝试运行应用程序并且所请求的程序集的版本是前一个版本,则会得到:

FileLoadException: Could not load file or assembly 

当引用的dll版本与当前版本不完全匹配时,会发生这种情况。 我认为问题在于如何引用这个程序集。

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

答案 2 :(得分:0)

你可以拥有两个dll,并且可以使用bindingRedirect,如下面的链接

dll versioning in dotnet

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="AssemblyName"
                              publicKeyToken="32ab4ba45e0a69a1"
                              culture="neutral" />
            <bindingRedirect oldVersion="1.0.0.0"
                             newVersion="2.0.0.0"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

答案 3 :(得分:0)

虽然以下App.Config的代码示例是正确的,但您可能希望通过在assemblyBinding树中添加以下publisherPolicy apply =“no”来阻止GAC策略覆盖您的愿望,这将导致所有程序集忽略GAC发布者政策或您可以发布publisherPolicy apply =“no”/&gt;在dependentAssembly树中,这将只传递该程序集的publisherPolicy。

   { <configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <publisherPolicy apply="no" /> // This applies to the whole application - all references
         <dependentAssembly>
         <publisherPolicy apply="no" /> // This applies only to this assembly
            <assemblyIdentity name="AssemblyName"
                              publicKeyToken="32ab4ba45e0a69a1"
                              culture="neutral" />
            <bindingRedirect oldVersion="1.0.0.0"
                             newVersion="2.0.0.0"/>
         </dependentAssembly>
      </assemblyBinding>}

有关详细信息,请参阅:MSDN reference