我有一个引用双面装配的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" />
我可以手动删除从该引用到双面装配的所有内容,但是当我更改某些属性时,它会返回到复杂版本,并且我不确定这是否安全。
那么如何正常更新参考文献?
答案 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
的算法定位新的程序集