C#项目:如何更新引用的程序集版本

时间:2014-10-01 13:47:39

标签: c# .net visual-studio-2012 .net-assembly

我有一个引用双面装配的C#项目。当我尝试更新双面部件时,即使我卸载/重新加载项目,Version标签在* .csproj文件中保持不变:

<Reference Include="<myAssembly>, Version=<oldVersion>, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath><myHintPath></HintPath>
</Reference>

所以我的项目尝试引用旧版本的程序集,这会导致异常。手动更改引用中的所有版本是非常痛苦的,特别是如果有很多引用的话。

我尝试将某些引用属性(例如SpecificVersion)更改为True并返回False,并将引用更新为:

<Reference Include="<myAssembly>, Version=<newVersion>, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath><myHintPath></HintPath>
</Reference>

如果我更新程序集,任何想法,如何自动更新引用?请注意,当我引用任何类似System.Configuration.Install的系统程序集时,引用非常简单:

<Reference Include="System.Configuration.Install" />

我可以手动删除从该引用到双面装配的所有内容,但是当我更改某些属性时,它会返回到复杂版本,并且我不确定这是否安全。

那么如何正常更新参考文献?

1 个答案:

答案 0 :(得分:7)

如果您始终希望从指定路径获取最新版本的程序集,请避免在csproj文件中使用version属性或将SpecificVersion设置为False。 SpecificVersion是一个可选属性,指示是否进行完整的名称匹配(包括version,culture和PublicKeyToken)。

<Reference Include="assemblyNameOnly">
   <HintPath>pathToDll</HintPath>
</Reference>

但不建议这样做,因为新版本的程序集可能会导致编译错误,例如:方法签名已更改。相反,最好使用强命名程序集和redirect assembly versions使用配置文件。

<Reference Include="assemblyName, Version=Version, Culture=neutral, PublicKeyToken=keyToken, processorArchitecture=MSIL">
  <SpecificVersion>True</SpecificVersion>
  <HintPath>pathToDll</HintPath>
</Reference>

然后,Runtime将使用描述here

的算法定位新的程序集