gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:07:55 25 4
gpt4 key购买 nike

在自定义生成项目中,可能会使用两种可能的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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com