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

问题描述 投票:0回答:6

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

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

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

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

欢迎任何建议。

asp.net asp.net-mvc nant
6个回答
4
投票

您不应该将 ASP.NET MVC 安装到构建箱上。您应该从存储第三方引用的位置引用 System.Web.MVC、System.Web.Routing 和 System.Web.Abstractions DLL。我们通常有一个用于所有引用的 /lib 文件夹,其中存储了 3 个 DLL(以及更多),还有一个 /src 文件夹,其中存储了所有代码。如果您以这种方式引用这些 DLL,则不再需要依赖这些 DLL 的环境。这篇博客文章更详细地解释了这个想法。


3
投票

在构建盒上安装 MVC 位应该可以解决这个问题 - 它要么缺少 .dll 来知道您的 Home.Index 视图源自 System.Web.Mvc.ViewPage,要么没有适合该项目的正确项目模板。使用编译器。


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>

1
投票

这不完全是您问题的答案,而是一种可能解决您希望实现的目标的不同策略。

我发现 studio 比命令行中的 asp 编译器更友好。

您不能通过 NAnt 命令行任务使用 devenv.exe 构建它吗?

祝你好运,


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
等。

您能提供更多详细信息吗?编译器是否说明在哪里遇到错误(文件、行号等)?


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.