在NAnt中使用ASP编译器构建ASP.NETMVC应用程序
作为持续集成过程的一部分,我正在使用ASP编译器在NAnt成功地构建ASP.Net应用程序,没有任何问题 但是,如果我在ASP.NETMVC应用程序上尝试完全相同的过程,则构建在NAnt中失败,但将在VisualStudio中成功编译。我在NAnt中收到的错误消息是: [HttpParseException]:无法加载类型“MyNamespace.Views.Home.Index” 看起来文件名中的点有问题,但我可能错了在NAnt中使用ASP编译器构建ASP.NETMVC应用程序,asp.net,asp.net-mvc,compiler-construction,nant,Asp.net,Asp.net Mvc,Compiler Construction,Nant,作为持续集成过程的一部分,我正在使用ASP编译器在NAnt成功地构建ASP.Net应用程序,没有任何问题 但是,如果我在ASP.NETMVC应用程序上尝试完全相同的过程,则构建在NAnt中失败,但将在VisualStudio中成功编译。我在NAnt中收到的错误消息是: [HttpParseException]:无法加载类型“MyNamespace.Views.Home.Index” 看起来文件名中的点有问题,但我可能错了 欢迎提供任何建议。我的最佳猜测是ASP.Net mvc dll未安装在生成
欢迎提供任何建议。我的最佳猜测是ASP.Net mvc dll未安装在生成服务器上。ASP.NETMVC是一个单独的下载版本。不完全是对您问题的回答,而是一个可能解决您希望实现的目标的不同策略 我发现studio比命令行中的asp编译器更友好 无法通过NAnt命令行任务使用devenv.exe生成它 祝你好运
Dan在构建框上安装MVC位应该可以解决这一问题——它要么缺少了解您的主页的.dll。索引视图是从System.Web.MVC.ViewPage中派生出来的,要么没有适合编译器使用的项目模板。您不应该在构建框上安装ASP.NET MVC。您应该从存储第三方引用的任何位置引用System.Web.MVC、System.Web.Routing和System.Web.Abstracts DLL。我们通常有一个/lib文件夹用于存储3个DLL(以及更多)的所有引用,还有一个/src文件夹用于存储所有代码。如果以这种方式引用这些DLL,则不必再依赖这些DLL的环境。这更详细地解释了这个想法。在我最近参与的一个项目中,我们使用以下目标构建了ASP.NET MVC web应用程序:
<target name="CompileSite" depends="blah blah">
<exec program="${framework::get-framework-directory('net-2.0')}\aspnet_compiler.exe" commandline="-p "${SrcDir}\Website" -v / -d "${CompiledSiteOutputDir}" -fixednames" workingdir="${BaseDir}" />
</target>
所以这绝对是可能的。我们的视图的名称类似于ProjectName.views.News.List
等
你能提供更多的细节吗?编译器是否说明在哪里遇到错误(文件、行号等) 在使用aspnet\u compile之前,MVC应用程序需要作为一个项目构建。如果您的MVC项目使用其他类库项目,则还需要对它们进行编译 在运行aspnet_compile之后,我们希望删除不属于已部署站点的各种文件 此生成文件位于我的项目MVCAPApplication的父目录中
<project default="build">
<property name="build.dir" value="${project::get-base-directory()}"/>
<property name="build.config" value="Release" />
<target name="build">
<exec program="${framework::get-framework-directory('net-3.5')}/msbuild.exe">
<arg value="/property:Configuration=${build.config}" />
<arg value="${build.dir}/MvcApplication/MvcApplication.csproj" />
</exec>
<delete dir="${build.dir}/PrecompiledWeb" includeemptydirs="true" failonerror="false"/>
<exec program="${framework::get-framework-directory('net-2.0')}/aspnet_compiler.exe">
<arg value="-v" />
<arg value="/" />
<arg value="-p" />
<arg value="MvcApplication/" />
<arg value="-f" />
<arg value="PrecompiledWeb" />
</exec>
<delete verbose="true" includeemptydirs="true" failonerror="false">
<fileset basedir="${build.dir}/PrecompiledWeb">
<include name="Controllers" />
<include name="Properties" />
<include name="obj/**" />
<include name="obj" />
<include name="*.csproj" />
<include name="*.csproj.user" />
</fileset>
</delete>
</target>
</project>
问题是,这在我的本地开发PC上运行。。。我可以在VisualStudio中构建项目,退出并打开一个命令窗口来运行我的NAnt脚本,但它失败了。。。!好啊新猜测:您打开的是“命令提示符”,而不是“VisualStudio提示符”。不同之处在于路径。由于路径丢失,无法找到dll。不,我已经按照构建要求设置了命令提示符环境变量-常规ASP.Net网站和其他组件文件构建良好…有趣的事情。我会调查的。你说得对,aspnet_compiler.exe比Visual Studio编译器更苛刻!!不,我没有在构建机器上运行脚本-我在本地运行脚本,然后再在构建机器上运行脚本,作为预检入测试。但由于它们不在本地开发机器上运行,我必须将代码静音,因为它会破坏构建机器。这正是我正在做的-我正在使用Ivy将MVC站点的依赖项解析到Lib文件夹中,代码从那里引用它们。构建服务器没有安装任何额外的MVC组件。非常感谢-这非常有效!我遗漏了您上面列出的一些参数。