2017-07-07 57 views
1

我正在使用Scripty.MsBuild在ASP.NET Core項目中生成一些文件。當我從VS2017建立,目標成功運行,但是當我通過dotnet建設,我得到的錯誤:如何檢查MSBuild是否使用.NET Core?

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. 

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

<PackageReference Include="Scripty.MsBuild" Version="0.7.4" Condition="'$(Configuration)'=='Debug'" /> 

這讓我在調試模式下從VS構建,並在構建服務器上使用dotnet構建。

但是,我仍然希望能夠在調試模式下(用於從VSCode運行)在本地執行dotnet run。因此,我需要根據Visual Studio的MSBuild是否正在運行或dotnet版本,有條件地包含PackageReference。據我所知,這兩個版本號完全相同;我錯過了什麼嗎?

MSBuild中有一個屬性可以用來區分VS MSBuild和dotnet之一嗎?

回答

2

原來有一個屬性MSBuildRuntimeType可以是CoreMonoFull。所以,我可以這樣做:

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

Reference from SDK

相關問題