2016-12-04 14 views
1

私はこれらすべての可能な例を試しましたが、私はこれらの作業のうちの1つを行うことはできませんでした。実際に動作するようにServiceDefinition.csdef変換を取得した人は誰ですか?Transform ServiceDefinition.csdef

以下のそれぞれの試みの間、私はServiceDefinition.csdefをBinフォルダ(ビルド後)に使用してから、パッケージファイルのcsdefを見ました。私は 'ベース'または元のファイルの 'その他'(私はこれが実際のサイズではないことを知っています)にvmsizeを設定していましたが、それを 'Large'に変更するはずの変換を使用します。

Fabriccontroller.net's Example

SkyLineTechnologies' Example

MSDN Blogger's Example

約3または4他の人...

我々はUmbracoベースのWebサイトを構築し、Azureの上でそれらをホストします。 3つの環境(QA、UAT、LIVE)を設定し、各環境に2つのWebロール(フロントエンドとバックオフィス)を用意しました。

QA-FE:ServiceDefinition.csdefを変換する目標は、そう、次のvmsizesに達しているということである小
QA-BO:小
UAT-FE:小
UAT-BO:小
LIVE -FE:大
LIVE-BO:小

私も、私は、複数のクラウドサービスプロジェクトを作成しようとしたことを指摘したいが、あなたは上記の条件で見ることができるように、これは

それは少し「奇妙」になり

最後に、TFSビルドサーバー(vNext)でトランスフォームを実行できる必要があります。

+0

私はこれを最後に解決したかもしれません.... –

+0

あなたは答えを投稿する必要があります、それは同じ問題に進む誰かを助けるでしょう:) –

+0

私は、少しスラミングされます。 –

答えて

3

多くの異なる提案を検討した結果、私は自分のソリューションの一部が機能していたが、他のものは機能していないことを見出した。私はこれに取り組むために見つけたものを結合して単純化しました。

この例では、我々は次の要件があります

  • Azureのクラウドサービスの最新バージョンは、我々が経由することを設定することができ、複数のサービスの設定をサポートしていますので、私たちは環境
  • に一致するようにビルド設定を必要とします私たちのケースではビルド設定にも合致させています。
  • ローカル(VS)とTFSリリースマネージャ (ビルドエージェント経由)を介して公開できる必要があります。
  • 私たちは、異なるサイズの3つの環境を持っています
  • LIVE(XLARGE)(小)
  • UAT(大)のVM
    • QAのためのプロジェクトフォルダへ

ゴーAzureクラウドサービス ServiceDefinition.csdefのコピーを作成し、ServiceDefinition.Base.csdefという名前を付けてください。 3つのファイルServiceDefinition.QAを追加してください。csdef | ServiceDefinition.UAT.csdef | ServiceDefinition.LIVE.csdef は、Visual Studioでプロジェクトをアンロードし、ServiceDefinition.csdefが含まれているccprogファイル ItemGroupを探すを編集し、次のようになりますどの:

<ItemGroup> 
    <ServiceDefinition Include="ServiceDefinition.csdef" /> 
    <ServiceConfiguration Include="ServiceConfiguration.QA.cscfg" /> 
    <ServiceConfiguration Include="ServiceConfiguration.UAT.cscfg" /> 
    <ServiceConfiguration Include="ServiceConfiguration.LIVE.cscfg" /> 
</ItemGroup> 

それは次のようになり行います

<ItemGroup> 
    <ServiceDefinition Include="ServiceDefinition.csdef" /> 
    <ServiceConfiguration Include="ServiceConfiguration.QA.cscfg" /> 
    <ServiceConfiguration Include="ServiceConfiguration.UAT.cscfg" /> 
    <ServiceConfiguration Include="ServiceConfiguration.LIVE.cscfg" /> 
    <None Include="ServiceDefinition.Base.csdef" /> 
    <None Include="ServiceDefinition.QA.csdef"> 
     <DependentUpon>ServiceDefinition.csdef</DependentUpon> 
    </None> 
    <None Include="ServiceDefinition.UAT.csdef"> 
     <DependentUpon>ServiceDefinition.csdef</DependentUpon> 
    </None> 
    <None Include="ServiceDefinition.LIVE.csdef"> 
     <DependentUpon>ServiceDefinition.csdef</DependentUpon> 
    </None> 
</ItemGroup> 

今インポート

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets" /> 

と終了Prのccprogファイルの一番下にとの間で行きますojectタグ

</Project> 

次の行を追加します。

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets" /> 
<Target Name="BeforeBuild" Condition=" '$(Configuration)' != 'Debug' "> 
    <Message Text="Removing Read-Only Attribute from ServiceDefinition.csdef" /> 
    <Exec Command="attrib -r $(ProjectDir)ServiceDefinition.csdef" /> 
    <Message Text="Transforming ServiceDefinition.Base.csdef with ServiceDefinition.$(Configuration).csdef to create ServiceDefinition.csdef" /> 
    <TransformXml Source="ServiceDefinition.Base.csdef" Transform="ServiceDefinition.$(Configuration).csdef" Destination="ServiceDefinition.csdef" /> 
</Target> 

プロジェクトを保存して再ロードされるエラーメッセージが出てくる場合は、問題を修正。リロード時に は、プロジェクトファイルには、次のようになります。

enter image description here

オープンServiceDefinition.QA.csdefと、これを追加します。

<?xml version="1.0" encoding="utf-8"?> 
<ServiceDefinition name="AzureCloudTransform" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" schemaVersion="2015-04.2.6"> 
    <WebRole name="WebApplication" vmsize="Small" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"> 
    </WebRole> 
</ServiceDefinition> 

保存

オープンServiceDefinition.UAT。 csdefを追加してこれを追加します。

<?xml version="1.0" encoding="utf-8"?> 
<ServiceDefinition name="AzureCloudTransform" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" schemaVersion="2015-04.2.6"> 
    <WebRole name="WebApplication" vmsize="Large" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"> 
    </WebRole> 
</ServiceDefinition> 

保存

オープンServiceDefinition.LIVE.csdefと、これを追加します。

<?xml version="1.0" encoding="utf-8"?> 
<ServiceDefinition name="AzureCloudTransform" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" schemaVersion="2015-04.2.6"> 
    <WebRole name="WebApplication" vmsize="XLarge" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"> 
    </WebRole> 
</ServiceDefinition> 

保存

が完了。

ビルドコンフィグレーションのいずれかでビルドすると、変換がビルドより先に行われ、VSがファイルのパッケージ化のために正常に実行できるようになります。 ServiceDefinition.csdefファイルはビルド前に変更され、正しいパッケージに含まれます。私がこの変換を行う最大の理由は、vNextビルド定義を使用しているビルドサーバで動作するためです。