webentwicklung-frage-antwort-db.com.de

datei web.config von der Befehlszeile konvertieren

Ich habe zwei Build-Umgebungen zum Anzielen; Release und Inszenierung. Die Web.config sieht folgendermaßen aus:

<system.web>     
    <authentication mode="Windows">
    </authentication>

    <authorization>
        <deny users="?" />
    </authorization>
</system.web>

Ich möchte es umwandeln, indem ich zur Konfiguration von config: Web.Staging.config aufbaue

<system.web>     
    <authentication mode="Windows">
    </authentication>

    <authorization xdt:Transform="Replace">
        <deny users="?" />
        <allow roles="StagingRoles" />
        <deny users="*" />
    </authorization>
</system.web>

Ich baue von der Kommandozeile aus so:

msbuild buildscript.build /p:Configuration=Staging

Nach dem Build sehe ich die Datei web.config nicht mehr im Build-Artefakt-Ordner. Stimmt hier etwas nicht?

Vielen Dank

33
sheldon_cooper

Wenn Sie die folgende XML-Datei am Ende der .csproj-Datei für Ihre Webanwendung hinzufügen, stellen Sie sicher, dass die Konfigurationsumwandlung vor jedem Build erfolgt:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="BeforeBuild">
    <TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>

Edit: Als Antwort auf Ihren Kommentar sollten Sie Web.config als Quellparameter in der Task TransformXml verwenden können (siehe Schritt 2). Wenn Sie die Konfigurationsumwandlung nur im Build-Skript ausführen möchten, befolgen Sie diese Anweisungen:

1) Importieren Sie WebApplication.targets wie folgt in Ihr Build-Skript:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

2) Führen Sie die TransformXml-Buildaufgabe in Ihrem Buildskriptziel aus:

<Target Name="MyBuildScriptTarget">
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
    ...other build tasks...
</Target>
32

Jonathans Antwort ist gut. Ich habe es leicht angepasst, damit die ursprüngliche Datei Web.config beibehalten werden kann. Dies sind die Zeilen, die ich am Ende meiner .csproj-Datei hinzugefügt habe:

  <!-- the step to copy the config file first avoids a 'File is being used by another process' error -->
  <Target Name="BeforeBuild">
    <Copy SourceFiles="Web.config" DestinationFiles="Web.temp.config" OverwriteReadOnlyFiles="True" />
    <TransformXml Source="Web.temp.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
  </Target>
  <Target Name="AfterBuild">
    <Copy SourceFiles="Web.temp.config" DestinationFiles="Web.config" OverwriteReadOnlyFiles="True" />
    <Delete Files="Web.temp.config" />
  </Target>

Ich kann sehen, dass die Datei web.config durch Ausführen eines Builds in Visual Studio (oder von einer Befehlszeile) aus transformiert wird. 

21
David White

Kleine Verbesserung gegenüber Jonathans Antwort:

Wenn Sie die folgende Zeile zum Importieren der Webziele verwenden, können Sie mit jeder Visual Studio-Version kompatibel sein. Beachten Sie, dass dies nicht an Version 10.0 gebunden ist

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" />
8
ambidexterous

Mit Build Transformation mit Jenkins sehe ich auch, dass web.config nicht transformiert wird. Die eigentliche Transformation findet jedoch statt, wenn Sie die Implementierung durchführen. Ich verwende einen All-in-One-Befehl msbuild, um das Erstellen und Bereitstellen zusammen auszuführen.

MSBuild MyProj.csproj /P:Configuration=Release /P:DeployOnBuild=True /P:DeployTarget=MsDeployPublish /P:MsDeployServiceUrl=https://your server/msdeploy.axd /P:AllowUntrustedCertificate=True /P:MSDeployPublishMethod=WMSvc /P:CreatePackageOnPublish=True /P:UserName=username /P:Password=password1 /P:DeployIISAppPath="Default Web Site or name of your website"

nach dem Ausführen können Sie auf dem Server überprüfen, ob die Umwandlung stattfindet.

0
Sandeep