Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在运行时使用已知属性查找正在运行的MSBuild版本-.NET Core或.NET Framework_C#_C++_Visual Studio_.net Core_Msbuild - Fatal编程技术网

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

C# 如何在运行时使用已知属性查找正在运行的MSBuild版本-.NET Core或.NET Framework,c#,c++,visual-studio,.net-core,msbuild,C#,C++,Visual Studio,.net Core,Msbuild,在自定义生成项目中,可能有两种可能的MSBuild框架正在使用。一个是用.NET内核构建的,另一个是用.NET Framework构建的Visual Studio MSBuild。后者在从VisualStudio生成时始终运行,而前者由命令行生成脚本使用。由于Visual Studio是我们选择的IDE,并且它目前只支持.NET Framework MSBuild,因此我们不能放弃对它的支持(迁移到纯.NET核心MSBuild会破坏IntelliSense、重构和其他多种功能) VCXPROJ

在自定义生成项目中,可能有两种可能的MSBuild框架正在使用。一个是用.NET内核构建的,另一个是用.NET Framework构建的Visual Studio MSBuild。后者在从VisualStudio生成时始终运行,而前者由命令行生成脚本使用。由于Visual Studio是我们选择的IDE,并且它目前只支持.NET Framework MSBuild,因此我们不能放弃对它的支持(迁移到纯.NET核心MSBuild会破坏IntelliSense、重构和其他多种功能)

<代码库中的一个项目是C++ +代码> VCXPROJ/<代码>,它只能在.NETFramework MSBuw中构建Windows,而在其他平台上,使用<代码>制作< /COD>。C++项目是一些C项目的依赖项,应该在基于标准MSBug逻辑构建时建立。 目前,它以以下方式被纳入C#项目:

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

当项目从Visual Studio生成时,条件始终为true(VS填充此值),当从生成脚本生成时,我们通过分别在项目级别调用MSBuild和生成vcxproj使其为false。但是,它并没有提供一个基于区分.NET核心和.NET Framework MSBuild的条件的通用解决方案

不幸的是,Visual Studio支持.NET核心MSBuild并将其用于vcxproj构建的最佳方案还很遥远

如何在运行时找到具有已知属性的 MSBuild正在运行-.NET Core或.NET Framework

尝试从中使用
$(MSBuildRuntimeType)

我的测试:

对于
test.csproj
,其中有如下自定义目标:

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

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

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


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

您好,您可以分别运行net core项目和framework项目,然后使用任务管理器查看它们是否调用msbuild.exe。我认为名为msbuild.exe的网络框架项目和名为dotnet.exe的网络核心项目包含了msbuild.exe的一部分,虽然它确实没有使用任何已知的属性,我需要创建自定义函数调用,这比读取任何现有属性都要昂贵。我想知道在VS IDE中生成Net Core项目时,是否要监视是调用Net Core SDK的dotnet msbuild还是只调用.framework msbuild。看起来您在找$(MSBuildRuntimeType)
Value=full
如果它是由.net fx msbuild生成的,
Value=core
如果它是由.net core msbuild.Thnx生成的!它完成了任务:)