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:
Ö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.
Stellt sich heraus, dass ich das schließlich gelöst haben könnte ... –
Sie sollten die Antwort posten, es wird jedem helfen, der in das gleiche Problem läuft :) –
Ich werde, ich bin ein bisschen zugeschlagen worden. –