【问题标题】:MSBuild Ignore absent <TargetFrameworks> for every .csproj in .sln?MSBuild 忽略 .sln 中的每个 .csproj 都缺少 <TargetFrameworks> 吗?
【发布时间】:2022-01-20 03:31:58
【问题描述】:

我在本地克隆的项目使用以下依赖项:

<TargetFrameworks>netstandard2.0;MonoAndroid10.0;Xamarin.iOS10;Xamarin.Mac20;netcoreapp3.0;netcoreapp3.1;net40;net45;net46;net47;net48</TargetFrameworks>

我需要告诉 Visual Studio 忽略那些未安装在我的系统中的框架和项目<->框架依赖项,只构建现有的没有手动删除他们从整个解决方案以及解决方案中的每个项目,无需安装和设置。让我们说如果安装了 netcoreapp3.1,则使用 netcoreapp3.1 构建 .sln 项目。

有没有办法做到这一点?

  • \'build .sln projects with netcoreapp3.1 if it\'s installed.\' 如果同时安装了 netcoreapp33.1 和 netstandard2.0,会发生什么?无论如何,您可能必须更改所有项目,因为有条件地选择框架的逻辑必须在项目中。
  • @stijn,大量的目标框架会导致这些项目依赖项产生大量错误,但 github 作者仍然倾向于尽可能多地实现,特别是如果他们的存储库具有 nuget 包集成。分叉一个会导致错误混乱。
  • 我明白,但这并不能回答我的问题;我会改写:您是否只想能够为特定框架构建,无论如何,或者您是否真的希望 msbuild 自动找出已安装/已安装的框架并使用它(如果是的话:如果实际上您安装了多个框架,应该会发生什么)?问题是,第一个问题的答案可能很简单,因为msbuild my.sln /p:TargetFramework=xxx 无论如何都会使用 xxx。第二个的答案可能很复杂。
  • stijn,您对第一个问题的回答回答了我的问题。

标签: visual-studio msbuild csproj cil sln-file


【解决方案1】:

请参阅documentation on TargetFrameworks:当指定TargetFramework(单数)时,它会被忽略,因此您可以使用选择的框架进行构建

msbuild my.sln /p:TargetFramework=netcoreapp3.1

(可以说,仅在项目文件中指定一堆可能的硬编码框架并不是超级用户友好的,如果作者有条件地以某种方式这样做会更好)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2012-03-15
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多