1

我有一个 Visual Studio 项目,它引用了我也创建的程序集。下面是项目中我的程序集引用属性的屏幕截图。当我将程序集版本更新为 时1.1.0.0,我的项目失败了,我认为这个属性是问题所在。

既然Version属性说1.0.0.0,这是否意味着它总是会寻找我的程序集的版本1.0.0.0?并且将我的版本增加到1.1.0.0将导致我的项目根本看不到程序集?

版本:1.0.0.0

4

1 回答 1

0

您有 2 个版本的强命名程序集。其他项目的设计行为是针对此类程序集的一个版本编译时无法加载具有不同版本的程序集。原因是版本更改表示 API 更改。否则它将使用相同版本进行就地更新 - 因此旧代码可能无法使用新的 DLL 正常运行。

选项:

  • 如果没有 API 更改 - 不要更改程序集的版本。这意味着您可以弃用方法,但不能添加/删除方法/类或改变行为。
  • 如果您根据该程序集控制所有项目 - 使用新参考重建所有项目并停止支持旧版本(如果可能)。
  • 在设置中提供发布者策略以将旧版本的请求重定向到新版本。这假设您的新版本确实与旧版本向后兼容。
  • 在 GAC 中安装所有版本,或者通过在每个可执行文件旁边放置正确的程序集来确保应用程序获得正确的程序集版本。当您不控制程序集的所有用户并且 API 发生重大变化时,这几乎是唯一的方法。

旁注:根据所讨论的程序集是用于内部(您控制使用该程序集的所有项目)还是外部使用,您可能需要做更多的工作来确保向后兼容性和适当的弃用策略。

发布商政策示例:来自上面链接的文章:

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="myAssembly"
                           publicKeyToken="32ab4ba45e0a69a1"
                           culture="en-us" />
         <!-- Redirecting to version 2.0.0.0 of the assembly. -->
         <bindingRedirect oldVersion="1.0.0.0"
                          newVersion="2.0.0.0"/>
       </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>
于 2013-06-05T18:26:12.707 回答