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
解决了问题,并构建了项目&发表成功。
- 现在的问题是,在SpecsFor MVC
我的最后一个问题是:是否有一种方法可以改变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中组织目标文件是一个挑战。我不知道这个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中的版本,它应该可以工作。