我正在通过命令行建立一个项目,而不是在Visual Studio 2013里面。注意,我已经把我的项目从Visual Studio 2012升级到2013。该项目在IDE中构建得很好。另外,我先完全卸载了VS2012,重新启动,然后安装了VS2013。我所拥有的唯一版本的Visual Studio是2013 Ultimate。
ValidateProjects:
39>path_to_project.csproj(245,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
39>Done Building Project "path_to_project.csproj" (Clean target(s)) -- FAILED.
以下是有问题的两行:
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
原本第二行是v10.0,但我手动将其改为v12.0。
$(VSToolsPath)从我看到的拉长到v11.0(VS2012)文件夹,显然它已经不在那里。路径应该是指向v12.0的。
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications\
我试着在系统环境变量表中指定VSToolsPath,但外部构建工具仍然使用v11.0。我试着在注册表中搜索,结果一无所获。
遗憾的是,我没有看到任何简单的方法来获得所使用的确切命令行。我使用一个构建工具。
有什么想法?
我有同样的问题,并找到了一个更简单的解决方案
这是由于Vs2012在csproj文件中添加了以下内容:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolspath>
</PropertyGroup>
你可以安全地删除这部分内容,你的解决方案将被构建。
正如Sielu指出的,你必须确保.proj文件的开头 有
<Project ToolsVersion="12"
,否则下次你用visual studio 2010打开这个 项目时,它将再次添加被删除的节点。
否则,如果你需要使用webdeploy或你使用构建服务器,上述解决方案将无法工作,但你可以在构建脚本中指定VisualStudioVersion
属性:
msbuild myproject.csproj /p:VisualStudioVersion=12.0
或编辑你的构建定义:
编辑构建定义以指定 "VisualStudioVersion "属性]2 !