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

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

Возможно ли вообще исключить все, а затем включить только то, что нужно?

Ответы [ 3 ]

9 голосов
/ 15 августа 2010

Я разместил запись в своем блоге по этому поводу на http://sedodream.com/2010/08/15/WebDeploymentToolMSDeployHowToExcludeFilesFromPackageBasedOnConfiguration.aspx. Вот резюме:

Вы используете тот же подход, что и в моем предыдущем ответе, ExcludeFromPackageFiles, но вы просто наложили на него условие. Так что если у вас есть файлы в папке scripts с 'debug' в имени файла, который вы хотите исключить из любого пакета, который не построен в конфигурации отладки, как вы делаете это

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

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

5 голосов
/ 20 августа 2010

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

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

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

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

Надеюсь, что кто-нибудь получит помощь и примеры из этой записи.

1 голос
/ 15 августа 2010

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

, например:

<ItemGroup>
    <Content Include="a.jpeg" Condition=" '$(Configuration)' == 'Client1' " />
</ItemGroup>
...