我有一个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版本而不必对其进行硬编码?
msbuild visual-studio visual-studio-2017 visual-studio-2017-build-tools