Question

Je veux supprimer certaines ressources d'image en fonction de ce que je publie construis à l'aide MsDeploy. J'ai trois builds pour différents clients qui sont basiquement un autre thème et beaucoup de transformations de configuration pour configurer correctement leur environnement.

Je ne voulez inclure les ressources d'image pour client1 lors du déploiement à client2.

utilise comme référence pour faire mes premiers pas trébuchants dans la personnalisation msdeploy et il fonctionne bien, mais je ne sais pas quelle variable pour obtenir le nom de la configuration.

In pseudo code:
if $configurationName == "client1"
  exclude dirs gfx/client2 and gfx/client3
if $configurationName == "client2"
  exclude dirs gfx/client1, gfx/client3
and so on...

Peut être son même possible d'exclure tout et inclure seulement celui qui est nécessaire?

Était-ce utile?

La solution

J'ai posté une entrée sur mon blog à ce sujet à http://sedodream.com /2010/08/15/WebDeploymentToolMSDeployHowToExcludeFilesFromPackageBasedOnConfiguration.aspx . Voici le résumé:

Vous utilisez la même approche que dans ma réponse précédente, ExcludeFromPackageFiles mais vous venez de mettre une condition sur elle. Donc, si vous avez des fichiers sous scripts dossier avec « debug » dans le nom de fichier que vous voulez exclure de tout paquet qui ne se construit pas dans la configuration de débogage la façon dont vous le faites est

<ItemGroup Condition=" '$(Configuration)'!='Debug' ">
  <ExcludeFromPackageFiles Include="scripts\**\*debug*" />
</ItemGroup>

Plus de détails sur mon blog, mais son un mod simple à l'approche précédente.

Autres conseils

Merci pour les réponses. Je fixe tout maintenant, avec beaucoup eu du mal, y compris une construction et de la migration pour ma base de données (migrator.net) mais je triché et l'ai fait par le runcommand à la place.

Je pensais que je posterai mon tout processus de déploiement ici afin que les gens qui lisent ce poste pourraient apprendre de tous mes misstakes. Les étapes de base sont les suivants:

  • web.config se transforme en vérifiez que tous les paramètres sont corrects pour chacun des clients
  • Sauvegarde des fichiers de serveur Web et base de données sur le serveur de production
  • Exclure tous les répertoires de GFX pour tous les clients
  • Inclure le GFX dir qui est recherché par ce client
  • Inclure binares supplémentaires et licence-fichiers qui ne sont pas référencés par le projet correclty
  • Migrer la base de données à la révision en cours
  • Webdeploy tous les nouveaux fichiers

Deploy.proj, importé par <Import Project="Deploy.csproj" /> à la dernière ligne du fichier de projet ProjetWeb:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <CopyAllFilesToSingleFolderForPackageDependsOn>
            ExcludeAllGfx;

            Client1Backup;
            Client1Include;
            Client1Migrate;

            CollectBinFiles;
            $(CopyAllFilesToSingleFolderForPackageDependsOn);
        </CopyAllFilesToSingleFolderForPackageDependsOn>
    </PropertyGroup>

    <Target Name="ExcludeAllGfx" BeforeTargets="ExcludeFilesFromPackage">
        <ItemGroup>
            <ExcludeFromPackageFiles Include="gfx\client1\**\*.*">
                <FromTarget>Project</FromTarget>
            </ExcludeFromPackageFiles>
            <ExcludeFromPackageFiles Include="gfx\client2\**\*.*">
                <FromTarget>Project</FromTarget>
            </ExcludeFromPackageFiles>
            <ExcludeFromPackageFiles Include="gfx\client3\**\*.*">
                <FromTarget>Project</FromTarget>
            </ExcludeFromPackageFiles>
        </ItemGroup>
        <Message Text="ExcludeFromPackageFiles: @(ExcludeFromPackageFiles)" Importance="high" />
    </Target>

    <Target Name="CollectBinFiles">
        <ItemGroup>
            <_CustomFiles Include="..\IncludeBin\Telerik\Telerik.ReportViewer.WebForms.dll" />
            <_CustomFiles Include="..\IncludeBin\Telerik\Telerik.Reporting.dll" />
            <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
                <DestinationRelativePath>Bin\%(Filename)%(Extension)</DestinationRelativePath>
            </FilesForPackagingFromProject>
        </ItemGroup>
    </Target>

    <Target Name="Client1Migrate" Condition="'$(Configuration)|$(Platform)' == 'Release Client1|AnyCPU'">
        <Exec Command="&quot;..\MigratorProject\Bats\Client1.bat&quot;" ContinueOnError="false" />
    </Target>

    <Target Name="Client1Include" Condition="'$(Configuration)|$(Platform)' == 'Release Client1|AnyCPU'">
        <ItemGroup>
            <_CustomFilesClient1 Include="gfx\Client1\**\*.*" Exclude="gfx\Client1\**\.svn\**\*.*">
                <FromTarget>Project</FromTarget>
            </_CustomFilesClient1>
            <FilesForPackagingFromProject Include="%(_CustomFilesClient1.Identity)">
                <DestinationRelativePath>gfx\client1\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
            </FilesForPackagingFromProject>
        </ItemGroup>
    </Target>

    <Target Name="Client1Backup" Condition="'$(Configuration)|$(Platform)' == 'Release Client1|AnyCPU'">
        <Exec Command="&quot;C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe&quot; -verb:sync -source:contentPath=&quot;page of client1&quot;,computerName=http://10.8.1.1/MsDeployAgentService2,encryptPassword=pass -dest:package=c:\Backups\deployments\client1.zip,computerName=http://10.8.1.1/MsDeployAgentService2,encryptPassword=pass" ContinueOnError="false" />
        <Exec Command="&quot;C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe&quot; -verb:sync -source:runCommand='C:\Backups\deployments\scripts\backup.cmd client1',waitInterval=20000 -dest:auto,computerName=http://10.8.1.1/MsDeployAgentService2,encryptPassword=pass" ContinueOnError="false" />
    </Target>
</Project>

Backup.cmd:

@echo off
sqlcmd -v name=%1 -S . -i "C:\Backups\deployments\scripts\backupdb.sql"
C:\Backups\deployments\scripts\stampme "C:\Backups\deployments\%1.zip"

backupdb.sql:

DECLARE @name NVARCHAR(50) -- database name 
DECLARE @path NVARCHAR(256) -- path for backup files 
DECLARE @fileName NVARCHAR(256) -- filename for backup 
DECLARE @fileDate NVARCHAR(20) -- used for file name 

SET @name = '$(name)'
SET @path = 'C:\Backups\deployments\' 
SELECT @fileDate = REPLACE(REPLACE(CONVERT(VARCHAR(50),GETDATE(),120),':','-'), ' ', '@')
SET @fileName = @path + @name + '_' + @fileDate + '.BAK' 
BACKUP DATABASE @name TO DISK = @fileName;

stampme.bat: http://ss64.com/nt/syntax-stampme.html

L'espoir quelqu'un obtient une aide et des exemples de cette entrée.

Vous pouvez étendre les exemples de Sayed en utilisant l'attribut Condition sur votre ItemGroup et la propriété $(Configuration).

par exemple:.

<ItemGroup>
    <Content Include="a.jpeg" Condition=" '$(Configuration)' == 'Client1' " />
</ItemGroup>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top