さまざまな azure 環境にデプロイするために、コンパイル手順の一部として csdef を変更し、ホスト ヘッダーを変更します。これを行うには、cspkg を再利用してデプロイ用に異なる構成を指定するのではなく、環境ごとに cspkg を 1 回ビルドする必要があります。
代わりに、cspkg の csdef ファイルを、作成後に再コンパイルせずに変更したいと考えています。それは可能ですか?
さまざまな azure 環境にデプロイするために、コンパイル手順の一部として csdef を変更し、ホスト ヘッダーを変更します。これを行うには、cspkg を再利用してデプロイ用に異なる構成を指定するのではなく、環境ごとに cspkg を 1 回ビルドする必要があります。
代わりに、cspkg の csdef ファイルを、作成後に再コンパイルせずに変更したいと考えています。それは可能ですか?
テスト環境とライブ環境を区別するために、あなたが求めているものと同様のことをしました。まず、代替設定に使用する新しい .csdef ファイルを作成する必要があります。元のファイルと交換するだけなので、これは完全なファイルである必要があります。これをクラウド プロジェクトに追加する必要があります。クラウド プロジェクトを右クリックし、[プロジェクトのアンロード] を選択します。もう一度右クリックして [[プロジェクト名] の編集] を選択します。次のようなセクションがあります。
<ItemGroup>
<ServiceConfiguration Include="ServiceConfiguration.Test.cscfg" />
<ServiceDefinition Include="ServiceDefinition.csdef" />
<ServiceConfiguration Include="ServiceConfiguration.cscfg" />
</ItemGroup>
新しく作成したファイルを指す新しい ServiceDefinition 項目を追加します。次の行を見つけます。
<Import Project="$(CloudExtensionsDir)Microsoft.WindowsAzure.targets" />
次に、このコード ブロックを追加し、TargeProfile チェックを編集して代替に使用するビルド構成にし、それが新しい .csdef ファイルを指すようにします。
<Target Name="AfterResolveServiceModel">
<!-- This should be run after it has figured out which definition file to use
but before it's done anything with it. This is all a bit hard coded, but
basically it should remove everything from the SourceServiceDefinition
item and replace it with the one we want if this is a build for test-->
<ItemGroup>
<!-- This is an interesting way of saying remove everything that is in me from me-->
<SourceServiceDefinition Remove="@(SourceServiceDefinition)" />
<TargetServiceDefinition Remove="@(TargetServiceDefinition)" />
</ItemGroup>
<ItemGroup Condition="'$(TargetProfile)' == 'Test'">
<SourceServiceDefinition Include="ServiceDefinition.Test.csdef" />
</ItemGroup>
<ItemGroup Condition="'$(TargetProfile)' != 'Test'">
<SourceServiceDefinition Include="ServiceDefinition.csdef" />
</ItemGroup>
<ItemGroup>
<TargetServiceDefinition Include="@(SourceServiceDefinition->'%(RecursiveDirectory)%(Filename).build%(Extension)')" />
</ItemGroup>
<Message Text="Source Service Definition Changed To Be: @(SourceServiceDefinition)" />
</Target>
通常に戻すには、プロジェクトを右クリックして [プロジェクトの再読み込み] を選択します。プロジェクトをビルドすると、使用する構成に応じて、異なる .csdef ファイルが使用されます。の設定エディターは 2 番目の .csdef ファイルを認識しないため、GUI を使用して新しい設定を追加する場合は、この代替バージョンに手動で追加する必要があることに注意してください。
別の CSDEF が必要な場合は、以下のように CSPACK コマンド プロンプトを直接使用して簡単に実行できます。
cspack <ProjectName>\ServiceDefinitionOne.csdef /out:ProjectNameSame.csx /out:ProjectOne.cspkg /_AddMoreParams
cspack <ProjectName>\ServiceDefinitionTwo.csdef /out:ProjectNameSame.csx /out:ProjectTwo.cspkg /_AddMoreParams
CSPACK の詳細: http://msdn.microsoft.com/en-us/library/windowsazure/gg432988.aspx
私の知る限り、作成後に .cspkg を簡単に変更することはできません。.cspkg は特定の構造に従う zip ファイルであるため、技術的にはおそらく可能だと思います。
私が尋ねる質問は、なぜですか?VM ロール サイズなどの設定を変更する場合 (.csdef ファイルで定義されているため)、いくつかの代替アプローチがあると思います。
個人的には、別の .csproj アプローチを採用しています。ほとんどの場合、私は構成ファイル変換の忍者ではないためです。. . まだ。;) これは最も抵抗の少ない方法で、これまでのところうまく機能しています。