簡體   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