[英]Visual Studio 2015 builds my project without problems, MSBuild.exe cannot
[英]SpecsFor MVC / MSBuild.exe not building / publishing project correctly in Visual Studio 2012
我正在尝试使用SpecsFor MVC进行自动验收测试,并且我注意到它无法在Visual Studio 2012上正确构建/发布项目,因此IIS Express没有运行,在整个自动验收中均以 “无法显示页面”消息结尾测试。
为了引导您完成所有测试,起初在尝试运行自动化测试时,我在运行时收到“ Build Failed”消息
_host = new SpecsForIntegrationHost(config);
_host.Start();
。 加载SpecsFor MVC源代码后,我注意到该错误是因为MSBuild.exe
进程失败并且输出消息正在写入Console.Output
。 检查输出后,我注意到错误是找不到Microsoft.WebApplication.targets
。 经过研究,我发现以下内容:
.csproj
删除<PropertyGroup>
节点,该节点删除后, MSBuild.exe
不会退出并显示错误代码,因为它只有警告,仍会导致项目无法正确构建和发布。 在这种情况下,SpecsFor MVC将这种情况视为成功,然后继续启动IIS Express,但是由于未成功构建项目,因此由于IIS Express运行不正常,验收测试导致出现另一条Page Cannot Be Displayed
消息。 C:\\Program Files (x86)\\MSBuild\\12.0\\Bin
具有一个新的不同MSBuild.exe文件C:\\Program Files (x86)\\MSBuild\\12.0\\Bin
。
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项目的源代码了吗?
在此先感谢您的帮助!
从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");
要了解如何在Visual Studio中组织这些“ .targets”文件是一个挑战。 我对SpecsFor MVC的工作原理一无所知,但是,如果在路径中放入正确的“ .targets”文件,它应该可以工作。 通过您的问题,我知道SpecsFor在内部调用MSBuild。
当您安装新的构建计算机时,这是一个类似的问题,并且缺少许多Visual Studio组件。 并非所有这些都与框架一起部署。 有些是与Visual Studio分开的安装程序一起提供的,其他则带有特定的组件。
我没有找到部署此所需文件的特定安装程序。 我刚刚找到了MSBuild 2012安装程序( http://www.microsoft.com/zh-cn/download/details.aspx?id=40760 ),但我不知道它是否部署了先前版本的.targets。
您也可以尝试使用特定版本的ASP.NET MVC安装程序。
另一种方法是尝试在SpecsFor中查找参数,以查看它正在调用哪个版本的MSBuild。 如果它使用Program Files \\ v12中的版本,则应该可以使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.