我有一个引用单面程序集的 C# 项目。当我尝试更新双面程序集时,版本标记在 *.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" />
我可以手动删除从该引用到单边程序集的所有内容,但是当我更改某些属性时,它会返回到复杂版本,我不确定这是否安全。
那么如何正常更新引用呢?
最佳答案
如果您总是想从指定路径获取最新版本的程序集,只需避免 csproj 文件中的版本属性或将 SpecificVersion 设置为 False。 SpecificVersion 为可选属性,表示是否进行全名匹配(包括版本、文化、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>
然后运行时将使用描述的算法定位新程序集 here
关于C# 项目 : how to update referenced assembly version,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26142931/