c# - 如何在运行时查找具有已知属性的MSBuild的哪个运行版本-.NET Core或.NET Framework

标签 c# c++ visual-studio .net-core msbuild

在自定义生成项目中,可能会使用两种可能的MSBuild框架。一种是用.NET Core构建的,一种是用.NET Framework构建的Visual Studio MSBuild。后者总是在从Visual Studio生成时运行,而前者由命令行生成脚本使用。由于事实,Visual Studio是我们的首选IDE,并且当前仅支持.NET Framework MSBuild,因此我们不能放弃对其的支持(向纯.NET Core MSBuild的迁移会破坏IntelliSense,重构和许多其他VS优点)。

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

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

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

当从Visual Studio构建项目时,条件始终为true(VS填充此值),而通过在项目级别调用MSBuild并分别构建vcxproj从构建脚本进行构建时,条件将为false。但是,它没有提供基于.NET Core和.NET Framework MSBuild之间条件区分的通用解决方案。

不幸的是,Visual Studio支持.NET Core MSBuild并将其用于vcxproj构建的最佳选择仍然遥遥无期。

最佳答案

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



尝试使用this document中的$(MSBuildRuntimeType)

我的测试:

对于其中有这样的自定义目标的test.csproj:
  <Target Name="Test" AfterTargets="build">
    <Message Text="value is $(MSBuildRuntimeType)" Importance="high"/>
  </Target>

当我使用msbuild test.csproj时,其值为完整(.net fx msbuild,与VS中的结果相同)

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

因此,如果您尝试获取一个属性来确定使用哪种类型的msbuild,这似乎可以满足您的需求。希望能有所帮助,如果我误解了任何内容,请随时纠正我。

关于c# - 如何在运行时查找具有已知属性的MSBuild的哪个运行版本-.NET Core或.NET Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59254872/

相关文章:

c# - 软件之父对他的双胞胎程序的(无条件)爱

javascript - 如何全屏显示媒体播放器顶部的文本?

c++ - 将 int 分配给具有两个不同输出的 char

c# - VS2010 安装项目卡住在 'Select Installation Folder'

windows - 构建Qt时复制qmake.exe出错

c# - 方法 'System.Object DynamicInvoke(System.Object[])' 没有支持的 SQL 转换

c# - 您如何在应用程序域之间传递经过身份验证的 session

c++ - C 或 C++ 中是否有 "inverted"trunc 函数?

c++ - 修复 cv::convertPointsFromHomogeneous 错误

visual-studio - 构建项目时出现 ssas 分区错误 - 该项目已存在于集合中