繁体   English   中英

如何在运行时使用众所周知的属性查找正在运行的 MSBuild 版本 - .NET Core 或 .NET Framework

[英]How to find at runtime with well known properties which build of MSBuild is running - .NET Core or .NET Framework

在自定义构建项目中,可能会使用两个可能的 MSBuild 框架。 一个使用 .NET Core 构建,而 Visual Studio MSBuild 使用 .NET Framework 构建。 后者在从 Visual Studio 构建时始终运行,而前者由命令行构建脚本使用。 由于事实上,Visual Studio 是我们选择的 IDE,它目前仅支持 .NET Framework MSBuild,我们不能放弃对它的支持(迁移到纯 .NET Core MSBuild 会破坏 IntelliSense、重构和多个其他 VS 优点)。

代码库中的项目之一是 C++ vcxproj ,它只能使用 .NET Framework MSBuild 在 Windows 上构建,而在其他平台上则使用make C++ 项目是某些 C# 项目的依赖项,应在基于标准 MSBuild 逻辑构建时构建。

目前,它通过以下方式包含在 C# 项目中:

<ProjectReference Condition="$(SolutionFileName) == 'Solution.sln'" Include="nativeproject\nativeproject.vcxproj" />

当从 Visual Studio 构建项目时,条件始终为真(VS 填充此值),我们通过在项目级别调用 MSBuild 并单独构建 vcxproj 从构建脚本构建时将其设为假。 但是,它没有提供基于条件区分 .NET Core 和 .NET Framework MSBuild 的通用解决方案。

不幸的是,Visual Studio 支持 .NET Core MSBuild 并将用于 vcxproj 构建的所有世界中最好的仍然很遥远。

如何在运行时使用众所周知的属性查找正在运行的 MSBuild 版本 - .NET Core 或 .NET Framework。

尝试使用本文档中的$(MSBuildRuntimeType)

我的测试:

对于test.csproj ,其中有这样的自定义目标:

  <Target Name="Test" AfterTargets="build">
    <Message Text="value is $(MSBuildRuntimeType)" Importance="high"/>
  </Target>

当我使用msbuild test.csproj (.net fx msbuild,VS 中的结果相同)时,它的值为Full

当我使用dotnet build test.csproj (.net core SDK 中包含的 .net core msbuild)时,它的值是Core

因此,如果您尝试获取一个属性来确定正在使用哪种 msbuild,它似乎可以满足您的需求。 希望它有所帮助,如果我误解了什么,请随时纠正我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM