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

Art*_*kyi 5 .net c# .net-assembly visual-studio-2012

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

<Reference Include="<myAssembly>, Version=<oldVersion>, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath><myHintPath></HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

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

我试图改变一些引用属性,比如SpecificVersion,to True和back False,以及引用刷新:

<Reference Include="<myAssembly>, Version=<newVersion>, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath><myHintPath></HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

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

<Reference Include="System.Configuration.Install" />
Run Code Online (Sandbox Code Playgroud)

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

那么如何正常更新参考?

小智 7

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

<Reference Include="assemblyNameOnly">
   <HintPath>pathToDll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

但不建议这样做,因为新版本的程序集可能导致编译错误,例如方法签名已更改.相反,最好使用强命名程序集并使用配置文件重定向程序集版本.

<Reference Include="assemblyName, Version=Version, Culture=neutral, PublicKeyToken=keyToken, processorArchitecture=MSIL">
  <SpecificVersion>True</SpecificVersion>
  <HintPath>pathToDll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

然后,Runtime将使用此处描述的算法定位新程序集