Веб-развертывание: исключить каталоги в зависимости от имени конфигурации проекта

Я хочу удалить некоторые ресурсы изображений в зависимости от того, какую сборку я выпускаю с помощью 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, но вы просто ставите для него условие. Итак, если у вас есть файлы в папке scripts с 'debug' в имени файла, который вы хотите исключить из любого пакета, который не построен в конфигурации отладки, как вы это делаете,

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

Более подробная информация в моем блоге, но это простой мод на предыдущий подход.

person Sayed Ibrahim Hashimi    schedule 15.08.2010

Спасибо за оба ответа. Я исправил все сейчас, много боролся с включением сборки и миграции для моей базы данных (migrator.net), но я обманул и сделал это с помощью команды run.

Я думал, что опубликую здесь весь свой процесс развертывания, чтобы люди, читающие этот пост, могли извлечь уроки из всех моих ошибок. Основные шаги:

  • Web.config преобразуется, чтобы убедиться, что все настройки верны для каждого из клиентов.
  • Резервное копирование файлов веб-сервера и базы данных на производственном сервере
  • Исключить все каталоги gfx для всех клиентов
  • Включите каталог gfx, который нужен этому клиенту
  • Включите дополнительные двоичные файлы и файлы лицензий, на которые не ссылается проект.
  • Перенести базу данных в текущую ревизию
  • Веб-развертывание всех новых файлов

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

<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

Вы можете расширить примеры Сайеда, используя атрибут Condition на вашем ItemGroup, и свойство $(Configuration).

e.g.:

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