Msbuild Microsoft.Net.Compilers软件包';s CSC.exe不是';t用于同一解决方案中的某些项目

Msbuild Microsoft.Net.Compilers软件包';s CSC.exe不是';t用于同一解决方案中的某些项目,msbuild,Msbuild,我们的TFS构建服务器是2012版,我试着编译C#6和C#7代码,并根据项目选择加入。我按照简单的步骤来做。带有单个MVC web项目的示例解决方案运行良好。另一个多项目解决方案也很有效,但我在日志中注意到其中一个项目使用了v4.0.30319\Csc.exe而不是packages\Microsoft.Net.Compilers.2.0.0-rc4\build\..\tools\Csc.exe。另一个我想升级到最新版本的解决方案(MVC Web)也起到了部分作用,即一个项目(简单类库)编译良好,

我们的TFS构建服务器是2012版,我试着编译C#6和C#7代码,并根据项目选择加入。我按照简单的步骤来做。带有单个MVC web项目的示例解决方案运行良好。另一个多项目解决方案也很有效,但我在日志中注意到其中一个项目使用了
v4.0.30319\Csc.exe
而不是
packages\Microsoft.Net.Compilers.2.0.0-rc4\build\..\tools\Csc.exe
。另一个我想升级到最新版本的解决方案(MVC Web)也起到了部分作用,即一个项目(简单类库)编译良好,而MVC Web项目失败

我添加了一些调试语句来跟踪MSBuild变量,下面是使用相同解决方案的两个项目的两组输出。解决方案可以在本地编译(在VS2015中)。msbuild参数包括
/tv:14.0/p:GenerateBuildInfoConfigFile=false/p:VisualStudioVersion=14.0
。我尝试过各种组合,没有参数,只有VisualStudioVersion等等

此项目是一个类库,MSBuild使用Microsoft.Net.Compilers包中的编译器

DebugWriteVariousVariables:
  BeforeTargets: CoreResGen
  UseSharedCompilation : false
  MSBuildThisFileDirectory : C:\Builds\2\MyApp\Sources\MyApp.ServiceFacade\
  MSBuildToolsVersion : 14.0
  BuildingProject : true
  VisualStudioVersion : 14.0
  VSToolsPath : 
  MSBuildBinPath : C:\Program Files (x86)\MSBuild\14.0\bin\amd64
  MSBuildExtensionsPath32 : C:\Program Files (x86)\MSBuild
  CscToolPath : C:\Builds\2\MyApp\packages\Microsoft.Net.Compilers.2.0.0-rc4\build\..\tools
  CscToolExe : csc.exe
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
CoreCompile:
  C:\Builds\2\MyApp\Sources\MyApp\packages\Microsoft.Net.Compilers.2.0.0-rc4\build\..\tools\csc.exe /noconfig /nowarn:1701,1702 ...
DebugWriteVariousVariables:
  BeforeTargets: CoreResGen
  UseSharedCompilation : 
  MSBuildThisFileDirectory : C:\Builds\2\MyApp\Sources\MyApp\
  MSBuildToolsVersion : 14.0
  BuildingProject : true
  VisualStudioVersion : 14.0
  VSToolsPath : C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0
  MSBuildBinPath : C:\Program Files (x86)\MSBuild\14.0\bin\amd64
  MSBuildExtensionsPath32 : C:\Program Files (x86)\MSBuild
  CscToolPath : C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
  CscToolExe : 
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
CoreCompile:
  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 ...
此项目是MVC Web,MSBuild不使用Microsoft.Net.Compilers包中的编译器

DebugWriteVariousVariables:
  BeforeTargets: CoreResGen
  UseSharedCompilation : false
  MSBuildThisFileDirectory : C:\Builds\2\MyApp\Sources\MyApp.ServiceFacade\
  MSBuildToolsVersion : 14.0
  BuildingProject : true
  VisualStudioVersion : 14.0
  VSToolsPath : 
  MSBuildBinPath : C:\Program Files (x86)\MSBuild\14.0\bin\amd64
  MSBuildExtensionsPath32 : C:\Program Files (x86)\MSBuild
  CscToolPath : C:\Builds\2\MyApp\packages\Microsoft.Net.Compilers.2.0.0-rc4\build\..\tools
  CscToolExe : csc.exe
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
CoreCompile:
  C:\Builds\2\MyApp\Sources\MyApp\packages\Microsoft.Net.Compilers.2.0.0-rc4\build\..\tools\csc.exe /noconfig /nowarn:1701,1702 ...
DebugWriteVariousVariables:
  BeforeTargets: CoreResGen
  UseSharedCompilation : 
  MSBuildThisFileDirectory : C:\Builds\2\MyApp\Sources\MyApp\
  MSBuildToolsVersion : 14.0
  BuildingProject : true
  VisualStudioVersion : 14.0
  VSToolsPath : C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0
  MSBuildBinPath : C:\Program Files (x86)\MSBuild\14.0\bin\amd64
  MSBuildExtensionsPath32 : C:\Program Files (x86)\MSBuild
  CscToolPath : C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
  CscToolExe : 
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
CoreCompile:
  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 ...
我可以看出
CscToolPath
设置不正确。我已经阅读了Microsoft.Net.Compilers.props的内容,但我不明白为什么会发生这种情况。我已经阅读了.csproj文件的内容并比较了它们。就建设项目而言,唯一明显的区别似乎在于以下两个方面:

  <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" Condition="false" />


如果需要,我可以添加更多调试语句。我还可以做些什么来排除故障并解决此问题?

您可以通过

以下是关于项目文件的声明

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">     
<Import Project="..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props')" />


是否因为MVC的webapplication目标文件,编译器被直接引用?buildserver与您正在工作的开发机器的可比性如何?@LeonG我的机器和build server中的可比性是相同的。此外,这些似乎都与编译无关,但这是我在比较有效项目和无效项目的csproj文件时注意到的一个明显差异。