多くの異なる提案を検討した結果、私は自分のソリューションの一部が機能していたが、他のものは機能していないことを見出した。私はこれに取り組むために見つけたものを結合して単純化しました。
この例では、我々は次の要件があります
- Azureのクラウドサービスの最新バージョンは、我々が経由することを設定することができ、複数のサービスの設定をサポートしていますので、私たちは環境
- に一致するようにビルド設定を必要とします私たちのケースではビルド設定にも合致させています。
- ローカル(VS)とTFSリリースマネージャ (ビルドエージェント経由)を介して公開できる必要があります。
- 私たちは、異なるサイズの3つの環境を持っています
- LIVE(XLARGE)(小)
- UAT(大)のVM
ゴー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>
プロジェクトを保存して再ロードされるエラーメッセージが出てくる場合は、問題を修正。リロード時に は、プロジェクトファイルには、次のようになります。
オープン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ビルド定義を使用しているビルドサーバで動作するためです。
私はこれを最後に解決したかもしれません.... –
あなたは答えを投稿する必要があります、それは同じ問題に進む誰かを助けるでしょう:) –
私は、少しスラミングされます。 –