Уеб внедряване: Изключете директории в зависимост от името на конфигурацията на проекта

Искам да изтрия някои ресурси за изображение в зависимост от компилацията, която пускам с помощта на MsDeploy. Имам три компилации за различни клиенти, които са основно друга тема и много трансформации на конфигурация, за да настроя правилно техните среди.

Не искам да включвам ресурсите на изображението за client1 при разполагане на client2.

Използвах това като справка за правенето на първите ми препъващи стъпки в персонализирането на msdeploy и работи добре, но нямам представа каква променлива да получа името на конфигурацията.

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

Възможно ли е дори да изключите всички и след това да включите само този, който е необходим?


person kiteloop    schedule 14.08.2010    source източник


Отговори (3)


Публикувах запис в моя блог за това на http://sedodream.com/2010/08/15/WebDeploymentToolMSDeployHowToExcludeFilesFromPackageBasedOnConfiguration.aspx. Ето и резюмето:

Използвате същия подход като в предишния ми отговор, ExcludeFromPackageFiles, но просто поставяте условие върху него. Така че, ако имате файлове в папката скриптове с 'debug' в името на файла, който искате да изключите от всеки пакет, който не е изграден под конфигурация за отстраняване на грешки, начинът, по който го правите, е

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

Повече подробности в моя блог, но това е проста модификация на предишния подход.

person Sayed Ibrahim Hashimi    schedule 15.08.2010

Благодаря и на двама ви отговора. Поправих всичко сега, борих се много с включването на компилация и миграция за моята база данни (migrator.net), но изневерих и го направих чрез командата за изпълнение вместо това.

Мислех да публикувам целия си процес на внедряване тук, така че хората, които четат тази публикация, да се поучат от всичките ми грешки. Основните стъпки са:

  • Web.config се трансформира, за да се увери, че всички настройки са правилни за всеки от клиентите
  • Архивиране на уеб сървър файлове и база данни на производствения сървър
  • Изключете всички gfx директории за всички клиенти
  • Включете gfx директорията, която се иска от този клиент
  • Включете допълнителни двоични файлове и лицензни файлове, които не са посочени в коректността на проекта
  • Мигрирайте базата данни към текущата версия
  • Webdeploy всички нови файлове

Deploy.proj, импортиран от <Import Project="Deploy.csproj" /> в последния ред на файла на проекта на webproject:

<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

Надявам се някой да получи малко помощ и примери от този запис.

person kiteloop    schedule 20.08.2010
comment
Включете допълнителни двоични файлове и лицензни файлове, които не са посочени от коректността на проекта -> просто ги добавете към проекта, зададен за копиране в изход. - person eglasius; 15.05.2011
comment
Да, но лицензите са различни за машини за разработка и за сценични/производствени сървъри, затова дори не ги искам в проекта. - person kiteloop; 08.06.2011

Можете да разширите примерите на Sayed, като използвате атрибута Condition на вашия ItemGroup и собствеността $(Configuration).

e.g.:

<ItemGroup>
    <Content Include="a.jpeg" Condition=" '$(Configuration)' == 'Client1' " />
</ItemGroup>
person Ruben Bartelink    schedule 15.08.2010