我正在尝试使用SpecsFor MVC进行自动验收测试,我注意到它没有在Visual Studio 2012上正确构建/发布项目,因此IIS Express未运行,结束于'页面无法显示'整个自动验收测试中的信息。
为了让您完成所有测试以使其正常工作,最初,在尝试运行自动化测试时,我遇到了“构建失败”的问题。运行时的消息
_host = new SpecsForIntegrationHost(config);
_host.Start();
。加载SpecsFor MVC源代码后,我注意到该错误是因为MSBuild.exe
进程失败并且输出消息正被写入Console.Output
。检查输出后,我注意到错误是找不到Microsoft.WebApplication.targets
。经过一番研究,我找到了以下内容:
<PropertyGroup>
移除.csproj
节点后删除它,MSBuild.exe
没有退出错误代码,因为它只有警告仍然导致项目没有建成和正确发布。在这种情况下,SpecsFor MVC将此方案视为成功并继续启动IIS Express,但由于项目未成功构建,验收测试导致另一条Page Cannot Be Displayed
消息,因为IIS Express未正确运行。C:\Program Files (x86)\MSBuild\12.0\Bin
中有一个新的不同的MSBuild.exe文件。
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项目的源代码?
提前感谢您的帮助!
答案 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中的版本,它应该可以工作。