SpecsFor MVC / MSBuild.exe无法在Visual Studio 2012中正确构建/发布项目

时间:2014-07-18 11:42:41

标签: c# asp.net-mvc visual-studio-2012 msbuild acceptance-testing

我正在尝试使用SpecsFor MVC进行自动验收测试,我注意到它没有在Visual Studio 2012上正确构建/发布项目,因此IIS Express未运行,结束于'页面无法显示'整个自动验收测试中的信息。

为了让您完成所有测试以使其正常工作,最初,在尝试运行自动化测试时,我遇到了“构建失败”的问题。运行时的消息

_host = new SpecsForIntegrationHost(config);
_host.Start();

。加载SpecsFor MVC源代码后,我注意到该错误是因为MSBuild.exe进程失败并且输出消息正被写入Console.Output。检查输出后,我注意到错误是找不到Microsoft.WebApplication.targets。经过一番研究,我找到了以下内容:

  • External VS2013 build error "error MSB4019: The imported project <path> was not found"
    • 投票最多的人谈到从<PropertyGroup>移除.csproj节点后删除它,MSBuild.exe没有退出错误代码,因为它只有警告仍然导致项目没有建成和正确发布。在这种情况下,SpecsFor MVC将此方案视为成功并继续启动IIS Express,但由于项目未成功构建,验收测试导致另一条Page Cannot Be Displayed消息,因为IIS Express未正确运行。
  • 经过一些进一步的研究后,我发现v11.0\WebApplications\Microsoft.WebApplication.targets was not found when file actually references v10概述了VS 2012在C:\Program Files (x86)\MSBuild\12.0\Bin中有一个新的不同的MSBuild.exe文件。
    • 现在问题是在SpecsFor MVC IISTestRunnerAction.PublishSite()方法中,MSBuild.exe的路径正在加载 System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()在我的情况下输出C:\Windows\Microsoft.NET\Framework64\v4.0.30319\。手动将其更改为C:\Program Files (x86)\MSBuild\12.0\Bin解决了问题并且项目已经建立并且已经建立。成功发表。

我的最后一个问题是:有没有办法可以更改System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()的值,以便我不需要更新SpecsFor MVC项目的源代码?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

从SpecsFor.Mvc 3.2.0-rc01开始(截至目前仍为预览版),您可以像这样配置MSBuild的路径:

var config = new SpecsForMvcConfig();
    config.UseIISExpress()
    .With(Project.Named("SpecsFor.Mvc.Demo"))
    .CleanupPublishedFiles()
    //Set the full path to MSBuild.exe here!
    .UseMSBuildExecutableAt(@"C:\Program Files (x86)\MSBuild\12.0\Bin\msbuild.exe")
    .ApplyWebConfigTransformForConfig("Test");

答案 1 :(得分:0)

了解这些&#34; .targets&#34;在Visual Studio中组织文件是一项挑战。我对这个SpecsFor MVC的作品一无所知,但如果你把正确的&#34; .targets&#34;在它的路径中,它应该工作。根据您的问题,我了解SpecsFor在内部调用MSBuild。

安装新的构建计算机时会出现类似的问题,并且缺少许多Visual Studio组件。并非所有这些都与框架一起部署。一些Visual Studio独立安装程序与其他特定组件一起提供。

我没有找到部署此所需文件的特定安装程序。我刚刚找到了MSBuild 2012安装程序(http://www.microsoft.com/en-us/download/details.aspx?id=40760),我不知道它是否部署了以前版本的.targets。

此外,您还可以针对特定版本尝试ASP.NET MVC安装程序。

另一种方法是尝试在SpecsFor中查找一个参数,以查看它正在调用哪个版本的MSBuild。可能如果它使用Program Files \ v12中的版本,它应该可以工作。