我使用ASP编译器成功地在NAnt中构建ASP .Net应用程序,没有问题。作为我的持续集成过程的一部分。
但是,如果我在ASP .NET MVC应用程序上尝试完全相同的过程,则构建在NAnt中失败,但将在Visual Studio中成功编译。我在NAnt中收到的错误信息是:
[HttpParseException]:无法加载类型'MyNamespace.Views.Home.Index'
看起来文件名中的点有问题,但我可能错了。
欢迎任何建议。
答案 0 :(得分:4)
您不应将ASP.NET MVC安装到构建框中。您应该从存储第三方引用的任何位置引用System.Web.MVC,System.Web.Routing和System.Web.Abstractions DLL。我们通常有一个/ lib文件夹,用于存储所有3个DLL(以及更多)的所有引用,以及我们所有代码所在的/ src文件夹。如果以这种方式引用这些DLL,则不再需要依赖于这些DLL的环境。这个blog post更详细地解释了这个想法。
答案 1 :(得分:3)
在构建框上安装MVC位应该对此进行排序 - 它缺少.dll来了解你的Home.Index视图来自System.Web.Mvc.ViewPage,或者它没有正确的项目模板供编译器使用。
答案 2 :(得分:2)
在使用aspnet_compile之前,需要将MVC应用程序构建为项目。如果您的MVC项目使用其他类库项目,则还需要编译它们。
在运行aspnet_compile之后,我们想要删除不应该是已部署站点一部分的各种文件。
此构建文件位于项目MvcApplication的父目录中。
<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>
答案 3 :(得分:1)
不完全是您问题的答案,而是更多可能解决您希望实现的问题的不同方法。
我发现工作室比命令行中的asp编译器更友好。
您是否可以通过NAnt命令行任务使用devenv.exe构建它。
祝你好运,
丹
答案 4 :(得分:1)
在我最近工作的项目中,我们使用此目标构建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
等。
您能提供更多详情吗?编译器是否说出遇到错误的位置(文件,亚麻等)?
答案 5 :(得分:0)
我最好的猜测是ASP.Net mvc dll没有安装在构建服务器上。 ASP.Net MVC是一个单独的下载。