2010-06-09 15 views
2

Dans mon dossier de Nant j'ai (chemins raccourcies):Comment obtenir VS2010 Web.config Transformations fonctionnant à partir de NAnt?

<echo message="#### TARGET - compile ####"/> 
<echo message=""/> 
<echo message="Build Directory is ${build.dir}" /> 

<exec program="${framework}\msbuild.exe" 
     commandline="..\src\Solution.sln /m /t:Clean /p:Configuration=Release" /> 

<exec program="${framework}\msbuild.exe" 
     commandline="..\src\Solution.sln /m /t:Rebuild /p:Configuration=Release" /> 

<exec program="${framework}\msbuild.exe" 
     commandline="..\src\Solution.sln /m /t:TransformWebConfig /p:Configuration=Release" /> 

qui se traduit par:

Build FAILED.  "C:\..\src\Solution.sln" (TransformWebConfig target) (1) ->   C:\..\src\Solution.sln.metaproj : error MSB4057: The target "TransformWebConfig" does not exist in the project. [C:\..\src\Solution.sln] 0 Warning(s) 1 Error(s)Time Elapsed 00:00:00.05 

La solution et les projets associés sont tous VS2010 et l'application Web a même la bonne référence dans le fichier .csproj:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> 

Cela ne devrait-il pas fonctionner?

Répondre

4

Vous ne pouvez pas, ce n'est pas un problème spécifique à NAnt, vous ne pouvez pas appeler TransformWebConfig sur un fichier de solution.

Solutions:

  • appel sur votre dossier de projet:

    <exec program="${framework}\msbuild.exe" 
         commandline="..\src\WebApp\WebApp.csproj /m /t:TransformWebConfig /p:Configuration=Release" /> 
    
  • Remplacer la cible AfterBuild dans votre fichier de projet pour appeler TransformWebConfig:

    <Target Name="AfterBuild"> 
        <CallTarget Targets="TransformWebConfig"/> 
    </Target> 
    
3

Je ne pouvais pas le faire fonctionner avec l'option TransformWebConfig ni la cible AfterBuild, Cependant, cette post était la réponse pour moi. En bref, voici ce que mon objectif de « construire » ressemble à Nant:

<target name="build" description="Compiles/Builds the Solution"> 
<echo message="Building..." /> 
<property name="build.configuration" value="Release" /> 

<msbuild project="${path::combine(staging.project,'_solutions\mySolutionName.sln')}" verbosity="minimal" failonerror="true" verbose="false"> 
    <arg value="/p:Configuration=${build.configuration};OutputPath=${path::combine(staging.output,'bin')}" /> 
    <arg value="/p:UseWPP_CopyWebApplication=True" /> 
    <arg value="/p:PipelineDependsOnBuild=False" /> 
    <arg value="/p:WebProjectOutputDir=${staging.output}\" /> 
    <arg value="/t:Rebuild" /> 
    <arg value="/nologo" /> 
</msbuild> 
<echo message="Building finished..." /> 

Tous les fichiers nécessaires pour le site Web pour exécuter sont copiés dans la spécifiée propriété « WebProjectOutputDir », y compris le Web. Config avec les transformations appliquées. il a travaillé comme un charme :)

-Diego

+1

Réglage 'UseWPP_CopyWebApplication = true' est l'affaire - merci! –