4

MsDeployを使用してリリースするビルドに応じて、一部のイメージリソースを削除したいと思います。基本的に別のテーマである異なるクライアント用の3つのビルドがあり、環境を正しくセットアップするための多くの構成変換があります。

client2にデプロイするときに、client1のイメージリソースを含めたくありません。

これを参照として使用して、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...

すべてを除外して、必要なものだけを含めることも可能でしょうか?

4

3 に答える 3

9

これに関するエントリをブログにhttp://sedodream.com/2010/08/15/WebDeploymentToolMSDeployHowToExcludeFilesFromPackageBasedOnConfiguration.aspxに投稿しました。要約は次のとおりです。

以前の回答であるExcludeFromPackageFilesと同じアプローチを使用しますが、条件を設定するだけです。したがって、スクリプトフォルダの下にファイル名に「debug」が含まれているファイルがあり、デバッグ構成でビルドされていないパッケージから除外したい場合は、次のようになります。

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

私のブログの詳細ですが、以前のアプローチに対する単純な変更です。

于 2010-08-15T19:06:06.070 に答える
5

両方の回答に感謝します。私は今すべてを修正し、データベース(migrator.net)のビルドと移行を含めるのに苦労しましたが、代わりにrunco​​mmandを使用してそれを行いました。

この投稿を読んだ人が私のすべての間違いから学ぶことができるように、展開プロセス全体をここに投稿すると思いました。基本的な手順は次のとおりです。

  • Web.configが変換され、各クライアントのすべての設定が正しいことを確認します
  • 本番サーバーでのWebサーバーファイルとデータベースのバックアップ
  • すべてのクライアントのすべてのgfxディレクトリを除外します
  • このクライアントが必要とするgfxディレクトリを含める
  • プロジェクトcorrecltyによって参照されていない追加のbinaresとライセンスファイルを含める
  • データベースを現在のリビジョンに移行します
  • すべての新しいファイルをWebデプロイします

<Import Project="Deploy.csproj" />Deploy.proj、 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

誰かがこのエントリからいくつかの助けと例を得ることを願っています。

于 2010-08-20T19:58:51.047 に答える
1

、およびプロパティのCondition属性を使用して、Sayedの例を拡張できます。ItemGroup$(Configuration)

例えば:

<ItemGroup>
    <Content Include="a.jpeg" Condition=" '$(Configuration)' == 'Client1' " />
</ItemGroup>
于 2010-08-15T00:32:59.610 に答える