繁体   English   中英

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

[英]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 经过研究,我发现以下内容:

  • 外部VS2013生成错误“错误MSB4019:找不到导入的项目<路径>”
    • 得票最多的人谈到从.csproj删除<PropertyGroup>节点,该节点删除后, MSBuild.exe不会退出并显示错误代码,因为它只有警告,仍会导致项目无法正确构建和发布。 在这种情况下,SpecsFor MVC将这种情况视为成功,然后继续启动IIS Express,但是由于未成功构建项目,因此由于IIS Express运行不正常,验收测试导致出现另一条Page Cannot Be Displayed消息。
  • 经过一些进一步的研究,我发现文件实际引用v10时未找到v11.0 \\ WebApplications \\ Microsoft.WebApplication.targets,它概述了VS 2012在C:\\Program Files (x86)\\MSBuild\\12.0\\Bin具有一个新的不同MSBuild.exe文件C:\\Program Files (x86)\\MSBuild\\12.0\\Bin
    • 现在的问题是,在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项目的源代码了吗?

在此先感谢您的帮助!

从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM