.net-core - 有没有办法将 PackageReference 更新为 Directory.Build.targets 中的某个最低版本?
问题描述
使用 .NET Core 5,有没有办法PackageReference
通过Directory.Build.targets
文件设置最低版本?
我们有一组项目,其中大部分需要使用编译器默认引用的特定版本的包(FSharp.Core
)。但是,一两个项目需要更高版本。因此,我们有一个Directory.Build.targets
:
<ItemGroup>
<PackageReference Update="FSharp.Core" Version="4.7.2" />
</ItemGroup>
因此,大多数项目文件都不需要提及FSharp.Core
,但有一些人想要更高版本,所以他们的项目文件中有这个:
<ItemGroup>
<PackageReference Update="FSharp.Core" Version="5.0.2" />
</ItemGroup>
但是,该Directory.Build.targets
文件随后会按照您的预期降级版本。我不希望它这样做。相反,我希望Directory.Build.targets
文件强加4.7.2
.
我想我可以把一个只适用于现有的Condition
有一个。但我一直无法弄清楚 MSBuild 的做法,并且很快得出结论,它甚至可能是不可能的。PackageReference
PackageReference
Version < 4.7.2
这是我目前所处的位置:
<Project>
<ItemGroup>
<FSharpCoreReferencesRequiringUpgrading Include="@(PackageReference)" Condition="$(%(Identity)) == 'FSharp.Core'"/>
</ItemGroup>
<ItemGroup>
<PackageReference Update="FSharp.Core" Version="4.7.2" />
</ItemGroup>
</Project>
通过使用 MSBuildMessage
任务,我一直在尝试找出修改Condition
on所需的咒语FSharpCoreReferencesRequiringUpgrading
,以便它:
- 过滤掉除
FSharp.Core
- 过滤掉所有
4.7.2
或更高的包引用
我被困在第一步,因为像上面那样做一个简单的比较string
不起作用,并且尝试调用ToString()
or不起作用:Include
PackageReference
<!--
error MSB4184: The expression "%(Identity).ToString()" cannot be evaluated.
-->
Condition="$(%(Identity).ToString()) == 'FSharp.Core'"
有谁知道这是否可能以及如何去做?
更新1:我在这里创建了一个repro
更新 2:我在此处添加了 David Kean (@davkean) 建议的修复示例。但是,我肯定还没有正确实施它,因为我显然误解了他
解决方案
更新
试试这个Directory.Build.targets
:
<Project>
<PropertyGroup Condition="'$(UseHigherFSharpCoreVersion)' != 'true'">
<FSharpCorePackageVersion>4.7.2</FSharpCorePackageVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(UseHigherFSharpCoreVersion)' == 'true'">
<FSharpCorePackageVersion>5.0.2</FSharpCorePackageVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Update="FSharp.Core" Version="$(FSharpCorePackageVersion)" />
</ItemGroup>
</Project>
然后在fsproj
应该使用更高版本的地方:
<PropertyGroup>
<UseHigherFSharpCoreVersion>true</UseHigherFSharpCoreVersion>
</PropertyGroup>
推荐阅读
- bash - 列出名称长度在 3 到 6 个字符之间的所有文件
- scala - 在 scala 中使用 docker 运行测试用例
- android - 如何从磨损操作系统发送通知到手机
- python - 在 Python 中使用 BeautifulSoup 抓取表数据
- graphql - 放大 Graphql 仅列出当前用户 Todo 的
- javascript - 如何正确发送文件到 axios?
- javascript - 在 d3 中用不同的颜色在一个散点图矩阵中可视化两个数据集
- javascript - d3.csv(...).then 不是函数
- azure - Azure 函数和实体框架
- java - Apache HTTP 客户端 connectTimeout 与 connectionRequestTimeout