我们已经将我们的MVC3项目升级到了在VS2010中运行的MVC4,目标仍然是4.0框架(还没有完全为4.5做好准备)。这一切在开发中都工作得很好,但是在构建服务器上构建失败了(不幸的是,使用Jenkins/Hudson ),并显示以下消息:
错误文件:未找到导入的项目"C:\Program MSB4019 (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets“”。确认声明中的路径正确,并且文件存在于磁盘上。
我在项目文件中寻找与此匹配的语句,但没有。csproj中的第二行(如下)明确针对v10.0:
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />我认为第一个可能会以某种方式解析到v11.0,但我不确定这是从哪里来的。这个解决方案在VS2012中至少打开过一次,所以我假设它在某个地方插入了一些东西,但不确定是什么。
在我的开发环境中,我已经重命名了VS2012路径,并且仍然可以在VS2010中加载和构建我的项目。
发布于 2012-12-28 01:52:09
找到了-答案或多或少在这里:http://blogs.msdn.com/b/webdev/archive/2012/08/22/visual-studio-project-compatability-and-visualstudioversion.aspx
基本上,如果您在VS2012中打开一个MVC4项目,它会更改项目文件以动态检测VS版本,如果找不到该值,则默认为v10.0。
我不能100%确定v11.0在构建服务器上来自哪里。恢复.sln文件似乎没有什么不同。但是,在将该特定更改恢复到.csproj文件后,它将成功构建。
具体地说,我对添加的行进行了如下注释:
<!--
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.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)' != ''" />
-->
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />https://stackoverflow.com/questions/14048968
复制相似问题