作为我的持续集成过程的一部分,我使用 ASP 编译器在 NAnt 中成功构建了 ASP .Net 应用程序,没有出现任何问题。
但是,如果我在 ASP .NET MVC 应用程序上尝试完全相同的过程,则在 NAnt 中构建会失败,但在 Visual Studio 中会成功编译。 我在 NAnt 中收到的错误消息是:
[HttpParseException]:无法加载类型“MyNamespace.Views.Home.Index”
看起来文件名中的点有问题,但我可能是错的。
欢迎任何建议。
您不应该将 ASP.NET MVC 安装到构建箱上。您应该从存储第三方引用的位置引用 System.Web.MVC、System.Web.Routing 和 System.Web.Abstractions DLL。我们通常有一个用于所有引用的 /lib 文件夹,其中存储了 3 个 DLL(以及更多),还有一个 /src 文件夹,其中存储了所有代码。如果您以这种方式引用这些 DLL,则不再需要依赖这些 DLL 的环境。这篇博客文章更详细地解释了这个想法。
在构建盒上安装 MVC 位应该可以解决这个问题 - 它要么缺少 .dll 来知道您的 Home.Index 视图源自 System.Web.Mvc.ViewPage,要么没有适合该项目的正确项目模板。使用编译器。
在使用 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>
这不完全是您问题的答案,而是一种可能解决您希望实现的目标的不同策略。
我发现 studio 比命令行中的 asp 编译器更友好。
您不能通过 NAnt 命令行任务使用 devenv.exe 构建它吗?
祝你好运,
丹
在我最近从事的一个项目中,我们使用此目标构建 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
等。
您能提供更多详细信息吗?编译器是否说明在哪里遇到错误(文件、行号等)?
我最好的猜测是 ASP.Net mvc dll 没有安装在构建服务器上。 ASP.Net MVC 需要单独下载。