为什么MSBuild仅在开发人员命令提示符下正常工作?

Ted*_*erg 2 msbuild command-line visual-studio-2015

我正在使用msbuild.exe类似的本地构建项目:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe MyProject.csproj
Run Code Online (Sandbox Code Playgroud)

当我通过Developer Command Prompt执行它时,一切都会按预期进行。

但是,当我通过标准命令提示符执行它时,出现一条错误消息:

找不到导入的项目“ C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ WebApplications \ Microsoft.WebApplication.targets”。

如果我查找该文件夹路径,则确实可以确认它无效(我在计算机上仅安装了VS 2015)。

那么,为什么是不是在工作的命令提示符,或者相反:为什么它在工作的开发人员命令提示符

编辑:.csproj的文件几乎是在Visual Studio 2015年默认为ASP.NET 4的网站,它指定:

<PropertyGroup>
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
Run Code Online (Sandbox Code Playgroud)

在我看来,如果未设置,它将默认为10.0VisualStudioVersion,但是从错误消息来看,它是假设VS版本12.0

我意识到我可以修改.csproj文件,将12替换为14,但我不想采取一种变通方法,而是理解为什么它在Developer Command Prompt中起作用,但在标准命令提示符中却不起作用。

我猜这可能与不同的环境变量有关,或者与之类似?

Paw*_*sik 6

运行开发人员命令提示符时,基本上是从VisualStudio的“工具”文件夹中运行VsDevCmd.bat,并为要使用的控制台设置一些环境变量。如果没有这些,MSBuild将找不到正确的文件。

例如,它设置了VisualStudioVersion环境变量

@rem VisualStudioVersion
@rem -------------------
@set VisualStudioVersion=14.0
Run Code Online (Sandbox Code Playgroud)

它取决于.csproj,但我怀疑您可能有类似的内容

<PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">12.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> 
Run Code Online (Sandbox Code Playgroud)

因此,如果未定义$(VisualStudioVersion)(并且在标准Command Prompt中不会),则它将使用版本12。当通过Developer Command Prompt运行它时,它将设置为14,您可以使用了。