项目参考属性 - 版本号

时间:2013-06-05 17:51:48

标签: c# visual-studio-2010 visual-studio reference

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

由于Version属性显示为1.0.0.0,这是否意味着它始终会查找版本为1.0.0.0的程序集?将我的版本增加到1.1.0.0将导致我的项目根本看不到程序集?

Version: 1.0.0.0

1 个答案:

答案 0 :(得分:0)

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

选项:

  • 如果没有API更改 - 请勿更改程序集的版本。这意味着您可以弃用方法,但不能添加/删除方法/类或改变行为。
  • 如果您根据该程序集控制所有项目 - 使用新引用重建所有项目并停止支持旧版本(如果可能)。
  • 在设置中提供publisher policy以将旧版本的请求重定向到新版本。这假设您的新版本实际上与旧版本向后兼容。
  • 在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>