我有一个 MSBuild 文件来将解决方案(在 VS 2013 中创建并移植到 VS 2017)发布到远程服务器。违规行是这一行:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
当我运行命令时:
"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
经过一些编译后,最终出现以下错误:
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
当然不能加载,因为版本应该是15.0,而不是12.0。
我尝试过的事情:
添加
/p:VisualStudioVersion=15.0
到我调用 MSBuild 的命令中。它不起作用。在*.csproj文件中更改元素:
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
为了:
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
它不起作用。
那么,如何$(VisualStudioVersion)
在 MSBuild 文件中获得正确的 VS 版本而无需对其进行硬编码呢?