2016-12-04 2 views
1

Ich habe jedes mögliche Beispiel ausprobiert, das mir noch nicht gelungen ist. Hat es jemand geschafft, eine ServiceDefinition.csdef Transformation zu bekommen, um wirklich zu arbeiten?Transform ServiceDefinition.csdef

Während jeder der folgenden Versuche habe ich die ServiceDefinition.csdef im Ordner Bin (nach dem Build) verwendet und dann das csdef in der Paketdatei angeschaut. Ich habe vmsize in der 'Basis' oder Originaldatei auf 'Other' gesetzt (ich weiß, dass dies keine echte Größe ist) und dann eine Transformation verwendet, die sie in 'Large' hätte ändern sollen, aber die letzte Datei zeigte immer 'Other'.

Fabriccontroller.net's Example

SkyLineTechnologies' Example

MSDN Blogger's Example

und etwa 3 oder 4 andere ...

Wir bauen Umbraco-basierte Websites und hosten sie auf Azure. Wir haben 3 Umgebungen (QA, UAT und LIVE) eingerichtet und in jeder Umgebung haben wir 2 Webrollen (Frontend und Back Office). Das Ziel, die ServiceDefinition.csdef Transformation ist so, dass die folgenden vmsizes erreicht:

QA-FE: Kleines
QA-BO: Kleiner
UAT-FE: Kleines
UAT-BO: Kleine
, LIVE -FE: Große
Live-BO: Kleine

ich möchte auch darauf hinweisen, dass ich mehrere Cloud-Service-Projekte zu schaffen versucht, aber wie Sie oben von den Anforderungen sehen können, das macht es ein bisschen ‚ungerade‘

Schließlich muss die Transformation auf unserem TFS-Build-Server (vNext) erfolgen können.

+0

Stellt sich heraus, dass ich das schließlich gelöst haben könnte ... –

+0

Sie sollten die Antwort posten, es wird jedem helfen, der in das gleiche Problem läuft :) –

+0

Ich werde, ich bin ein bisschen zugeschlagen worden. –

Antwort

3

Ich kam zu meiner Lösung, nachdem ich viele verschiedene Vorschläge überprüft hatte. Ich fand heraus, dass Teile von ihnen funktionierten, andere jedoch nicht. Ich habe schließlich kombiniert und vereinfacht, was ich darin gefunden habe.

Für dieses Beispiel haben wir die folgenden Anforderungen:

  • Wir haben die Build-Konfiguration benötigen unsere Umgebungen können wir mehrere Service-Konfigurationen unterstützt
  • Da die neueste Version von Azure Cloud Services anzupassen, dass einrichten über die eingebauten Optionen, in unserem Fall passen wir auch unsere Build-Konfigurationen an.
  • Wir müssen in der Lage sein, über lokale (VS) und TFS Release Manager (über einen Build-Agent) zu veröffentlichen.
  • Wir haben drei Umgebungen mit unterschiedlicher Größe VMs
    • QA (small)
    • UAT (Large)
    • , LIVE (XLarge)

Zum Projektordner für Azure Cloud Services Erstellen Sie eine Kopie der ServiceDefinition.csdef und nennen Sie sie ServiceDefinition.Base.csdef Fügen Sie 3 Dateien hinzu, ServiceDefinition.QA.csdef | ServiceDefinition.UAT.csdef | ServiceDefinition.LIVE.csdef Ihr Projekt in Visual Studio entlasten und ccprog Datei Finden Sie die ItemGroup bearbeiten, die die ServiceDefinition.csdef enthält, die wie folgt aussehen:

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

Machen Sie es wie folgt aussehen:

<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> 

gehen Sie jetzt auf den Boden der ccprog Datei und zwischen dem Import

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

und dem Schließen Pr oject Tag

</Project> 

Fügen Sie den folgenden:

<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> 

Speichern und das Projekt neu laden, wenn Fehlermeldungen kommen, beheben Sie das Problem. Beim Nachladen, sollte die Projektdatei wie folgt aussehen:

enter image description here

Öffnen Sie die ServiceDefinition.QA.csdef und fügen Sie diese:

<?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> 

Speichern

öffnen ServiceDefinition.UAT. csdef und fügen diese hinzu:

<?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> 

Speichern

öffnen ServiceDefinition.LIVE.csdef und fügen Sie diese:

<?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> 

Speichern

Erledigt.

Wenn Sie nun eine der Buildkonfigurationen erstellen, wird die Transformation vor dem Build ausgeführt, wodurch VS dann normal zum Packen der Dateien ausgeführt werden kann. Die Datei "ServiceDefinition.csdef" wird vor dem Build geändert und in das Paket aufgenommen. Der Hauptgrund, warum ich dies auf diese Weise geändert habe, ist, dass es auf unseren Build-Servern funktioniert, die vNext Build-Definitionen verwenden.