4

さまざまな azure 環境にデプロイするために、コンパイル手順の一部として csdef を変更し、ホスト ヘッダーを変更します。これを行うには、cspkg を再利用してデプロイ用に異なる構成を指定するのではなく、環境ごとに cspkg を 1 回ビルドする必要があります。

代わりに、cspkg の csdef ファイルを、作成後に再コンパイルせずに変更したいと考えています。それは可能ですか?

4

3 に答える 3

6

テスト環境とライブ環境を区別するために、あなたが求めているものと同様のことをしました。まず、代替設定に使用する新しい .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 を使用して新しい設定を追加する場合は、この代替バージョンに手動で追加する必要があることに注意してください。

于 2012-05-03T22:30:31.607 に答える
3

別の CSDEF が必要な場合は、以下のように CSPACK コマンド プロンプトを直接使用して簡単に実行できます。

  1. コマンド ウィンドウを開き、Windows Azure プロジェクトに関連する CSDEF/CSCFG および CSX フォルダーがあるフォルダーを見つけます。
  2. マイナーな変更に応じて複数の CSDEF を作成する
  3. CS* コマンドを起動するパスに Windows Azure SDK があることを確認してください
  4. CSPACK コマンドを使用し、パラメーターを渡して、以下のような異なる CSDEF および出力 CSPKG ファイルを使用します。

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

于 2012-05-03T17:41:02.650 に答える
0

私の知る限り、作成後に .cspkg を簡単に変更することはできません。.cspkg は特定の構造に従う zip ファイルであるため、技術的にはおそらく可能だと思います。

私が尋ねる質問は、なぜですか?VM ロール サイズなどの設定を変更する場合 (.csdef ファイルで定義されているため)、いくつかの代替アプローチがあると思います。

  • バリエーションごとに個別の Windows Azure 展開プロジェクト (.csproj) を作成します。はい、これが面倒な場合があることは理解していますが、Visual Studio のツールをうまく機能させることができます。使いやすいツールサポートを使用することは、わずかな問題に見合うだけの価値があるかもしれません.
  • ビルド プロセスの一部として構成ファイルの変換を実行します。web.config 変換に似ています。

個人的には、別の .csproj アプローチを採用しています。ほとんどの場合、私は構成ファイル変換の忍者ではないためです。. . まだ。;) これは最も抵抗の少ない方法で、これまでのところうまく機能しています。

于 2012-05-03T14:21:20.343 に答える