在MSBuild文件中获取VS 2017的正确$(VisualStudioVersion)

tas*_*ydb 5 msbuild visual-studio visual-studio-2017 visual-studio-2017-build-tools

我有一个MSBuild文件可将解决方案(在VS 2013中创建并移植到VS 2017)发布到远程服务器。令人讨厌的一句话是:

<PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup> 
Run Code Online (Sandbox Code Playgroud)

当我运行命令时:

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild" WebSite1_Web_configs.build /p:Configuration=Integracion;Platform="AnyCPU" /p:VisualStudioVersion=15.0
Run Code Online (Sandbox Code Playgroud)

经过一些编译后,最终会出现以下错误:

Error MSB4062 The "TransformXml" task could not be loaded from the assembly C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll
Run Code Online (Sandbox Code Playgroud)

当然不能加载,因为版本应该是15.0,而不是12.0。

我尝试过的事情:

  • 将其添加/p:VisualStudioVersion=15.0到我调用MSBuild的命令中。没用

  • * .csproj文件中更改元素:

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild" WebSite1_Web_configs.build /p:Configuration=Integracion;Platform="AnyCPU" /p:VisualStudioVersion=15.0
Run Code Online (Sandbox Code Playgroud)

对于:

Error MSB4062 The "TransformXml" task could not be loaded from the assembly C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll
Run Code Online (Sandbox Code Playgroud)

没用

那么,如何$(VisualStudioVersion)在MSBuild文件中获取正确的VS版本而不必对其进行硬编码?

tas*_*ydb 14

好的,问题是我<Import>在 *.build 文件的末尾有元素。其中一个导入对路径的一部分进行了硬编码:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" />
Run Code Online (Sandbox Code Playgroud)

我把它改成:

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

我用/p:VisualStudioVersion=15.0参数执行了 MSBuild并且它起作用了。

请,如果您有同样的问题,请检查您是否有硬编码路径的导入