2015-11-04 3 views
0

Je dois construire au niveau de la solution en utilisant MSBuild car j'ai plusieurs configurations. J'ai une cible personnalisée dans mon projet Web qui publie la sortie. Je peux spécifier le projet web comme cible et ça se construit bien. Mais j'ai besoin de publier l'application web. Existe-t-il un moyen de créer la cible personnalisée d'un projet lors de la construction au niveau de la solution? J'ai trouvé ce link, mais je ne comprends pas la solution. Si quelqu'un pouvait le décomposer un peu, cela aiderait beaucoup.MSBuild: Créer une cible de projet personnalisée lorsque la solution est spécifiée

C'est ce que ma ligne de commande actuelle PowerShell ressemble:

& "$env:windir\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" ` 
    "..\..\Solution.sln" ` 
    "/t:WebApplication:PublishToFileSystem" ` 
    "/p:Configuration=$configuration;PublishDestination=$publishPath" 

Le :PublishToFileSystem l'amène à l'échec, avec ce message:

error MSB4057: The target "PublishToFileSystem" does not exist in the project. [C:\Source\Solution.sln] 

C'est ce que mon objectif personnalisé dans mon. fichier csproj ressemble à:

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

Répondre

0

Ainsi, après quelques recherches, j'ai trouvé que la création d'un La cible personnalisée n'est pas la meilleure façon de publier une application Web. En supposant que vous disposez d'un seul projet Web dans votre solution, MS a étendu MSBuild pour utiliser les profils de publication (les mêmes que ceux utilisés lorsque vous publiez dans Visual Studio). J'ai pu créer un profil de publication pour chaque configuration (environnement) et appelez la ligne de commande suivante:

& "$env:windir\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" ` 
    "..\..\Solution.sln" ` 
    "/p:DeployOnBuild=true" ` 
    "/p:PublishProfile=$configuration" 

Je devais assurer que mes publier des profils avaient le même nom que mon $configuration.

publish profiles