在我的解决方案中,我使用Package.props
文件作为参考包的设置版本。
例如,如果我想添加一个nuget包Microsoft.Cool.Package
到我的一个解决方案的项目,我只是把相应的.csproj
文件一行:
<PackageReference Include="My.Cool.Package" />
并在Package.props
中添加另一个:
<PackageReference Update="My.Cool.Package" Version="1.0.1" />
对于本地开发,我有时想替换所有项目中的nuget包引用,就像我想:<PackageReference Include="My.Cool.Package" />
变成<PackageReference Include="../../My.Cool.Package.csproj" />
。
我如何通过在Package.props
文件中进行相应的更改来实现这一点,这将覆盖所有非本地包包含。
如果您的.csproj有
<ItemGroup>
<PackageReference Include="My.Cool.Package"/>
</ItemGroup>
然后在Directory.Packages.props中你可以使用
<PropertyGroup>
<HasCoolPackage>@(PackageReference->AnyHaveMetadataValue("Identity", "My.Cool.Package"))</HasCoolPackage>
</PropertyGroup>
,并在此基础上删除它和其他内容:
<ItemGroup>
<PackageReference Include="../My.Cool.Package.csproj" Condition="$(HasCoolPackage) == True"/>
<PackageReference Remove="My.Cool.Package" Condition="$(HasCoolPackage) == True"/>
</ItemGroup>
注意:由于msbuild计算顺序,行必须按照显示的顺序排列,否则msbuild将首先删除包,然后再次计算属性,此时它将为false。