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

本文关键字:构建 布项目 项目 2012 exe MSBuild MVC 不能 SpecsFor Studio Visual | 更新日期: 2023-09-27 18:13:24

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

为了让您了解我的所有测试以使其工作,最初,当尝试运行自动化测试时,我在运行

时收到"构建失败"消息
_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,但由于项目没有成功构建,验收测试导致另一个Page Cannot Be Displayed消息,因为IIS Express没有正确运行。
  • 经过进一步的研究,我找到了v11.0'WebApplications'Microsoft.WebApplication。当文件实际引用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项目的源代码?

提前感谢您的帮助!

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

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中组织目标文件是一个挑战。我不知道这个SpecsFor MVC的工作原理,但如果你把正确的"。目标"文件在它的路径,它应该工作。根据你的问题,我理解SpecsFor在内部调用MSBuild。

这是一个类似的问题,当你安装一个新的构建机器,很多Visual Studio组件丢失。并非所有这些都与框架一起部署。有些是Visual Studio独立安装程序,有些是特定组件。

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

你也可以试试ASP。. NET MVC安装程序

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