使用NAnt中的ASP编译器构建ASP .Net MVC应用程序

时间:2009-09-06 17:22:25

标签: asp.net asp.net-mvc compiler-construction nant

我使用ASP编译器成功地在NAnt中构建ASP .Net应用程序,没有问题。作为我的持续集成过程的一部分。

但是,如果我在ASP .NET MVC应用程序上尝试完全相同的过程,则构建在NAnt中失败,但将在Visual Studio中成功编译。我在NAnt中收到的错误信息是:

  

[HttpParseException]:无法加载类型'MyNamespace.Views.Home.Index'

看起来文件名中的点有问题,但我可能错了。

欢迎任何建议。

6 个答案:

答案 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 &quot;${SrcDir}\Website&quot; -v / -d &quot;${CompiledSiteOutputDir}&quot; -fixednames" workingdir="${BaseDir}" />
</target>

所以这绝对是可能的。我们的观点被命名为ProjectName.Views.News.List等。

您能提供更多详情吗?编译器是否说出遇到错误的位置(文件,亚麻等)?

答案 5 :(得分:0)

我最好的猜测是ASP.Net mvc dll没有安装在构建服务器上。 ASP.Net MVC是一个单独的下载。