2009-09-06 7 views
4

Je construis avec succès des applications ASP Net dans NAnt en utilisant le compilateur ASP, sans problème, dans le cadre de mon processus d'intégration continue.Utilisation du compilateur ASP dans NAnt pour créer une application ASP .Net MVC

Toutefois, si j'essaie exactement le même processus sur une application ASP .NET MVC, la génération échoue dans NAnt, mais compilera avec succès dans Visual Studio. Le message d'erreur que je reçois à Nant est:

[HttpParseException]: Impossible de charger le type 'MyNamespace.Views.Home.Index'

qui semble qu'il a un problème avec les points de la noms de fichiers, mais je peux me tromper.

Toutes les suggestions sont les bienvenues.

Répondre

2

L'application MVC doit être construite en tant que projet avant d'utiliser aspnet_compile. Si votre projet MVC utilise d'autres projets de bibliothèque de classes, ils doivent également être compilés. Après l'exécution de aspnet_compile, nous souhaitons ensuite supprimer divers fichiers qui ne doivent pas faire partie du site déployé.

Ce fichier de construction se trouve dans le répertoire parent de mon projet 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> 
+0

Merci beaucoup - Cela fonctionne très bien! Il me manquait quelques-uns des paramètres que vous avez définis ci-dessus. –

0

Ma meilleure estimation est que les DLL mvc ASP.Net ne sont pas installés sur le serveur de construction. ASP.Net MVC est un téléchargement séparé.

+0

Le problème est, cela est en cours d'exécution sur mon PC local dev ... Je peux littéralement construire le projet dans Visual Studio, sortir dehors et ouvrir une fenêtre de commande pour exécuter mon script NAnt et il échoue ... ! –

+1

OK. Nouvelle supposition: vous ouvrez l'invite de commande et non l'invite "Visual Studio". La différence est le chemin. Comme le chemin est manquant, il ne peut pas trouver la DLL. –

+0

Non, j'ai configuré mes variables d'environnement d'invite de commande comme les builds l'exigent - les sites web ASP .Net classiques et d'autres fichiers de composants se construisent bien ... –

1

Pas exactement une réponse à votre question, mais plus d'un point de vue différent qui pourrait résoudre ce que vous souhaitez réaliser.

Je trouve studio pour être plus convivial que le compilateur ASP de la ligne de commande. Pourriez-vous ne pas le construire avec devenv.exe via une tâche de ligne de commande NAnt.

Bonne chance,

Dan

+0

Intéressant prendre des choses. Je vais regarder dedans. –

+0

Vous avez raison, le aspnet_compiler.exe est WAY plus dur que le compilateur Visual Studio !! –

3

Installation des bits MVC sur la zone de construction devrait régler cette - il est soit dépourvu des DLLs de connaître votre point de vue de Home.Index descend de System.Web .Mvc.ViewPage ou il n'a pas le bon modèle de projet pour le compilateur à utiliser.

+0

Non, je n'exécute pas les scripts sur la machine de compilation - je les exécute localement AVANT de les exécuter sur la machine de construction, comme test de pré-enregistrement. Mais comme ils ne fonctionnent pas sur la machine de développement locale, je dois mettre en sourdine le code car cela va casser la machine de construction. –

4

Vous ne devez pas installer ASP.NET MVC dans la zone de construction. Vous devez référencer les DLL System.Web.MVC, System.Web.Routing et System.Web.Abstractions à partir de l'endroit où vous stockez vos références tierces. Nous avons normalement un dossier/lib pour toutes les références où nous avons ces 3 DLL (et beaucoup d'autres) stockées et un dossier/src où tout notre code vit. Si vous faites référence à ces DLL de cette façon, vous n'avez plus besoin de compter sur l'environnement pour ces DLL. Ce blog post explique cette idée plus en détail.

+1

C'est exactement ce que je fais - j'utilise Ivy pour résoudre les dépendances de mon site MVC dans le dossier Lib, d'où le code les référence. Le serveur de construction n'a aucun composant MVC supplémentaire installé. –

1

Sur un projet, je travaillais sur récemment, nous construisons l'application Web ASP.NET MVC en utilisant cet objectif:

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

il est certainement possible. Nos vues ont été nommées quelque chose comme ProjectName.Views.News.List etc.

Pourriez-vous fournir plus de détails? Est-ce que le compilateur dit où il rencontre l'erreur (fichier, linenumber etc.)?