在NAnt中使用ASP编译器构建ASP.NETMVC应用程序

在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编译器在NAnt成功地构建ASP.Net应用程序,没有任何问题

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

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

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


欢迎提供任何建议。

我的最佳猜测是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 &quot;${SrcDir}\Website&quot; -v / -d &quot;${CompiledSiteOutputDir}&quot; -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组件。非常感谢-这非常有效!我遗漏了您上面列出的一些参数。