45

Folks,VS2010 Web Publier version en ligne de commande du système de fichiers déployer

En un mot, je veux reproduire cette boîte de dialogue: alt text

Il est un Visual Studio 2010 projet ASP.Net MVC. Si j'exécute cette commande, j'obtiens tous les fichiers que je veux, y compris les web.configs transformés dans le répertoire "C: \ ToDeploy".

Je veux répliquer ceci sur la ligne de commande afin que je puisse l'utiliser pour une construction d'environnement de QA.

J'ai vu divers articles sur la façon de faire cela sur la ligne de commande pour Remote Deploys, mais je veux juste le faire pour les déploiements de système de fichiers. Je sais que je pourrais répliquer cette fonctionnalité en utilisant des tâches nAnt ou des scripts rake, mais je veux le faire en utilisant ce mécanisme, donc je ne me répète pas.

J'ai étudié ce un peu plus, et je l'ai trouvé ces liens, mais aucun d'entre eux résous proprement:

Merci en avance!

Répondre

46

Ok, enfin compris cela.

La ligne de commande dont vous avez besoin est:

msbuild path/to/your/webdirectory/YourWeb.csproj /p:Configuration=Debug;DeployOnBuild=True;PackageAsSingleFile=False 

Vous pouvez modifier où les résultats du projet par l'ajout d'une propriété de outdir=c:\wherever\ dans le répertoire/p: section.

Cela va créer la sortie à:

path/to/your/webdirectory/obj/Debug/Package/PackageTmp/ 

Vous pouvez ensuite copier ces fichiers dans le répertoire ci-dessus en utilisant la méthode que vous souhaitez.

J'ai tout cela fonctionne comme une tâche de râteau de rubis en utilisant Albacore. J'essaie de tout faire pour que je puisse le mettre en contribution au projet. Mais si quelqu'un veut le code avant cela, faites le moi savoir.

Une autre ride que j'ai trouvé était qu'il mettait en paramètres Tokenized dans le Web.config. Si vous n'avez pas besoin de cette fonctionnalité, assurez-vous d'ajouter:

/p:AutoParameterizationWebConfigConnectionStrings=false 
+0

Malheureusement, ceci copie l'ensemble du paquet. Je pense que vous devrez utiliser MS Web Deploy pour copier uniquement les fichiers modifiés. – jrummell

+5

Pour être complet, la propriété OutDir doit se terminer par une barre oblique (erreurs MSBuild sinon). Donc, votre suggestion devrait être 'outdir = c: \ where \'. –

+0

En outre, au lieu de '/ p: DeployOnBuild = True', vous pouvez simplement utiliser la cible Package:'/t: Package'. Les travaux pour moi, ainsi que les paramètres 'PackageAsSingleFile' et' AutoParameterizationWebConfigConnectionStrings' sont également respectés. –

11

Je pensais que je poste une autre solution que j'ai trouvé, je l'ai mis à jour cette solution afin d'inclure un fichier journal.

Ceci est similaire à Publish a Web Application from the Command Line, mais juste nettoyé et ajouté le fichier journal. consultez également la source d'origine http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

Créez un MSBuild_publish_site.chauve-souris (nommez peu importe) dans la racine de votre application web projet

set msBuildDir=%WINDIR%\Microsoft.NET\Framework\v4.0.30319 
set destPath=C:\Publish\MyWebBasedApp\ 

:: clear existing publish folder 
RD /S /Q "%destPath%" 

call %msBuildDir%\msbuild.exe MyWebBasedApp.csproj "/p:Configuration=Debug;PublishDestination=%destPath%;AutoParameterizationWebConfigConnectionStrings=False" /t:PublishToFileSystem /l:FileLogger,Microsoft.Build.Engine;logfile=Manual_MSBuild_Publish_LOG.log 

set msBuildDir= 
set destPath= 

Mettez à jour votre fichier projet d'application Web MyWebBasedApp.csproj en ajoutant le code XML suivant sous la balise <Import Project=

<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder"> 
<Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." /> 
    <MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" /> 

    <ItemGroup> 
     <PublishFiles Include="$(_PackageTempDir)\**\*.*" /> 
    </ItemGroup> 

    <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" /> 
</Target> 

cette fonctionne mieux pour moi que d'autres solutions.

consultez les liens suivants pour plus d'informations:

1) http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

2) Publish a Web Application from the Command Line

3) Build Visual Studio project through the command line

+2

Cela fonctionne très bien – Dann

-1

Un fichier msbuild complet avec l'inspiration de CubanX

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Publish"> 
     <RemoveDir Directories="..\build\Release\Web\" 
        ContinueOnError="true" />   
     <MSBuild Projects="TheWebSite.csproj" 
       Targets="ResolveReferences;_CopyWebApplication" 
       Properties="Configuration=Release;WebProjectOutputDir=..\build\Release\Web;OutDir=..\build\Release\Web\bin\" 
     /> 
    </Target> 
    <Target 
     Name="Build" 
     DependsOnTargets="Publish;"> 
    </Target> 
</Project> 

Cela place le site publié dans le Web .. \ build \ Release

0

J'ai une solution pour Visual Studio 2012: https://stackoverflow.com/a/15387814/2164198

Cependant, cela fonctionne sans Visual Studio installé du tout! (Voir MISE À JOUR). Je n'ai pas encore vérifié si on peut obtenir tous les éléments nécessaires à partir de Visual Studio Express 2012 pour l'installation Web.

1

Ma solution pour CCNET avec la transformation web.config:

<tasks> 
    <msbuild> 
     <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable> 
     <workingDirectory>E:\VersionesCC\Trunk_4\SBatz\Gertakariak_Orokorrak\GertakariakMS\Web</workingDirectory> 
     <projectFile>GertakariakMSWeb2.vbproj</projectFile> 
     <targets>Build</targets> 
     <timeout>600</timeout> 
     <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger> 
     <buildArgs> 
      /noconsolelogger /p:Configuration=Release /v:diag 
      /p:DeployOnBuild=true 
      /p:AutoParameterizationWebConfigConnectionStrings=false 
      /p:DeployTarget=Package 
      /p:_PackageTempDir=E:\Aplicaciones\GertakariakMS2\Web 
     </buildArgs> 
     </msbuild> 
</tasks> 
1

Sur VS2012 et au-dessus, vous pouvez vous référer aux éléments existants publish profiles on your project avec msbuild 12,0, cela équivaudrait à un clic droit et publier ... en sélectionnant un profil de publication ("MyProfile" sur cet exemple):

msbuild C:\myproject\myproject.csproj "/P:DeployOnBuild=True;PublishProfile=MyProfile" 
Questions connexes