3

我们已经将我们的 MVC3 项目升级到在 VS2010 中运行的 MVC4,仍然针对 4.0 框架(还没有为 4.5 做好准备)。这一切在开发中都可以正常工作,但是在构建服务器上构建失败(遗憾的是使用 Jenkins/Hudson),并显示以下消息:

错误 MSB4019:找不到导入的项目“C:\Program Files (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,但我不确定它来自哪里。该解决方案已在 VS 2012 中至少打开一次,所以我假设它在某处插入了一些东西,但不确定是什么。

在我的开发环境中,我重命名了 VS 2012 路径,并且仍然可以在 VS 2010 中加载和构建我的项目。

4

1 回答 1

3

找到它 - 答案或多或少在这里: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" />
于 2012-12-27T17:52:08.737 回答