如何检查MSBuild是否正在使用.NET Core?

Gei*_*erg 5 msbuild .net-core

Scripty.MsBuild用来在ASP.NET Core项目中生成一些文件。从VS2017构建时,目标运行成功,但是通过构建时dotnet,出现错误:

Scripty.MsBuild.targets(31,5): error MSB4062: The "ScriptyTask" task could not be loaded from the assembly C:\Users\geirsagberg\.nuget\packages\scripty.msbuild\0.7.4\build\\..\tools\Scripty.MsBuild.dll. Could not load file or assembly 'Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask.
Run Code Online (Sandbox Code Playgroud)

我目前的解决方法是禁用Scripty.MsBuildRelease配置:

<PackageReference Include="Scripty.MsBuild" Version="0.7.4" Condition="'$(Configuration)'=='Debug'" />
Run Code Online (Sandbox Code Playgroud)

这使我可以在调试模式下从VS进行构建,dotnet并在构建服务器上进行构建。

但是,我仍然希望能够dotnet run在调试模式下进行本地操作(用于从VSCode运行)。因此,我需要PackageReference根据是否运行Visual Studio的MSBuild或dotnet版本来有条件地添加该条件。据我所知,这两个具有完全相同的版本号。我错过了什么吗?

我可以使用MSBuild中的一个属性来区分VS MSBuild和dotnet它吗?

Gei*_*erg 7

原来有一个属性MSBuildRuntimeType是可以是CoreMonoFull。所以我可以做:

<PackageReference Include="Scripty.MsBuild" Version="0.7.4" Condition="'$(MSBuildRuntimeType)'!='Core'" />
Run Code Online (Sandbox Code Playgroud)

SDK参考