Freigeben über


Bereitstellen einer ASP.NET Webanwendung mit SQL Server Compact mit Visual Studio oder Visual Web Developer: Web.Config File Transformations - 3 von 12

Von Tom Dykstra

Startprojekt herunterladen

In dieser Reihe von Lernprogrammen erfahren Sie, wie Sie ein ASP.NET Webanwendungsprojekt bereitstellen (veröffentlichen), das eine SQL Server Compact-Datenbank mit Visual Studio 2012 RC oder Visual Studio Express 2012 RC für Web enthält. Sie können Visual Studio 2010 auch verwenden, wenn Sie das Web Publish Update installieren. Eine Einführung in die Reihe finden Sie im ersten Lernprogramm in der Reihe.

Ein Lernprogramm, in dem Bereitstellungsfeatures gezeigt werden, die nach der RC-Version von Visual Studio 2012 eingeführt wurden, zeigt, wie Sie andere SQL Server-Editionen als SQL Server Compact bereitstellen und wie Sie mithilfe von Visual Studio Azure-App Service-Web-Apps bereitstellen ASP.NET.

Übersicht

In diesem Lernprogramm erfahren Sie, wie Sie den Prozess der Änderung der Web.config-Datei automatisieren, wenn Sie sie in verschiedenen Zielumgebungen bereitstellen. Die meisten Anwendungen verfügen über Einstellungen in der Datei "Web.config ", die bei der Bereitstellung der Anwendung unterschiedlich sein müssen. Durch die Automatisierung des Prozesses, diese Änderungen vorzunehmen, müssen Sie diese bei jeder Bereitstellung manuell ausführen, was mühsam und fehleranfällig wäre.

Erinnerung: Wenn Beim Durchlaufen des Lernprogramms eine Fehlermeldung angezeigt wird oder etwas nicht funktioniert, überprüfen Sie unbedingt die Problembehandlungsseite.

Web.config-Transformationen im Vergleich zu Web Deploy-Parametern

Es gibt zwei Möglichkeiten zum Automatisieren des Änderns von Web.config-Dateieinstellungen : Web.config-Transformationen und Web Deploy-Parameter. Eine Web.config-Transformationsdatei enthält XML-Markup, das angibt, wie die Web.config-Datei geändert wird, wenn sie bereitgestellt wird. Sie können unterschiedliche Änderungen für bestimmte Buildkonfigurationen und für bestimmte Veröffentlichungsprofile angeben. Die Standardbuildkonfigurationen sind Debug und Release, und Sie können benutzerdefinierte Buildkonfigurationen erstellen. Ein Veröffentlichungsprofil entspricht in der Regel einer Zielumgebung. (Weitere Informationen zum Veröffentlichen von Profilen finden Sie im Bereitstellen in IIS als Lernprogramm zur Testumgebung .)

Web Deploy-Parameter können verwendet werden, um viele verschiedene Arten von Einstellungen anzugeben, die während der Bereitstellung konfiguriert werden müssen, einschließlich einstellungen, die in Web.config-Dateien gefunden werden. Wenn sie zum Angeben von Änderungen der Datei "Web.config " verwendet werden, sind Web Deploy-Parameter komplexer zum Einrichten, aber sie sind nützlich, wenn Sie nicht wissen, dass der Wert festgelegt werden soll, bis Sie die Bereitstellung durchführen. In einer Unternehmensumgebung können Sie beispielsweise ein Bereitstellungspaket erstellen und einer Person in der IT-Abteilung zur Installation in der Produktion zuweisen, und diese Person muss in der Lage sein, Verbindungszeichenfolge oder Kennwörter einzugeben, die Sie nicht kennen.

Für das Szenario, das in diesem Lernprogramm behandelt wird, wissen Sie, was für die Datei "Web.config " erforderlich ist, damit Sie keine Web Deploy-Parameter verwenden müssen. Sie konfigurieren einige Transformationen, die je nach verwendeter Buildkonfiguration unterschiedlich sind, und einige, die je nach verwendetem Veröffentlichungsprofil unterschiedlich sind.

Erstellen von Transformationsdateien für Veröffentlichungsprofile

Erweitern Sie in Projektmappen-Explorer Web.config, um die Transformationsdateien "Web.Debug.config" und "Web.Release.config" anzuzeigen, die standardmäßig für die beiden Standardbuildkonfigurationen erstellt werden.

Web.config_transform_files

Sie können Transformationsdateien für benutzerdefinierte Buildkonfigurationen erstellen, indem Sie mit der rechten Maustaste auf die Datei "Web.config" klicken und "Konfigurationstransformationen hinzufügen" aus dem Kontextmenü auswählen, aber für dieses Lernprogramm müssen Sie dies nicht tun.

Sie benötigen zwei weitere Transformationsdateien, um Änderungen zu konfigurieren, die mit dem Bereitstellungsziel zusammenhängen, anstatt mit der Buildkonfiguration. Ein typisches Beispiel für diese Art von Einstellung ist ein WCF-Endpunkt, der sich für Tests im Vergleich zur Produktion unterscheidet. In späteren Lernprogrammen erstellen Sie Profile mit dem Namen "Test and Production", daher benötigen Sie eine Web.Test.config-Datei und eine Web.Production.config-Datei .

Transformationsdateien, die an Veröffentlichungsprofile gebunden sind, müssen manuell erstellt werden. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt ContosoUniversity, und wählen Sie "Ordner öffnen" im Windows-Explorer aus.

Open_folder_in_Windows_Explorer

Wählen Sie in Windows Explorer die Datei "Web.Release.config " aus, kopieren Sie die Datei, und fügen Sie dann zwei Kopien davon ein. Benennen Sie diese Kopien "Web.Production.config" und "Web.Test.config" um, und schließen Sie dann Windows Explorer.

Klicken Sie in Projektmappen-Explorer auf "Aktualisieren", um die neuen Dateien anzuzeigen.

Wählen Sie die neuen Dateien aus, klicken Sie mit der rechten Maustaste, und klicken Sie dann im Kontextmenü auf "In Project einschließen".

Einschließen von Test- und Produktionskonfigurationsdateien im Projekt

Um zu verhindern, dass diese Dateien bereitgestellt werden, wählen Sie sie in Projektmappen-Explorer aus, und ändern Sie dann im Eigenschaftenfenster die Eigenschaft "Buildaktion" von "Inhalt" in "Keine". (Die Transformationsdateien, die auf Buildkonfigurationen basieren, werden automatisch daran gehindert, bereitzustellen.)

Sie können jetzt Web.config-Transformationen in die Web.config-Transformationsdateien eingeben.

Einschränken des Fehlerprotokollzugriffs auf Administratoren

Wenn während der Ausführung der Anwendung ein Fehler auftritt, zeigt die Anwendung anstelle der vom System generierten Fehlerseite eine generische Fehlerseite an und verwendet das Elmah NuGet-Paket für die Fehlerprotokollierung und -berichterstellung. Das customErrors Element in der Datei "Web.config " gibt die Fehlerseite an:

<customErrors mode="RemoteOnly" defaultRedirect="~/GenericErrorPage.aspx">
  <error statusCode="404" redirect="~/GenericErrorPage.aspx" />
</customErrors>

Um die Fehlerseite anzuzeigen, ändern Sie vorübergehend das mode Attribut des customErrors Elements von "RemoteOnly" in "Ein", und führen Sie die Anwendung aus Visual Studio aus. Verursacht einen Fehler, indem eine ungültige URL angefordert wird, z . B. Studentsxxx.aspx. Anstelle einer von IIS generierten Fehlerseite "Seite nicht gefunden" wird die GenericErrorPage.aspx Seite angezeigt.

Error_page

Um das Fehlerprotokoll anzuzeigen, ersetzen Sie alles in der URL nach der Portnummer durch elmah.axd (z. B. im Screenshot http://localhost:51130/elmah.axd), und drücken Sie die EINGABETASTE:

Elmah_log_page

Vergessen Sie nicht, das customErrors Element wieder auf den "RemoteOnly"-Modus festzulegen, wenn Sie fertig sind.

Auf Ihrem Entwicklungscomputer ist es praktisch, den kostenlosen Zugriff auf die Fehlerprotokollseite zu ermöglichen, aber in der Produktion wäre dies ein Sicherheitsrisiko. Für die Produktionswebsite können Sie eine Autorisierungsregel hinzufügen, die den Fehlerprotokollzugriff nur auf Administratoren einschränkt, indem Sie eine Transformation in der Datei "Web.Production.config " konfigurieren.

Öffnen Sie Web.Production.config , und fügen Sie ein neues location Element unmittelbar nach dem öffnenden configuration Tag hinzu, wie hier gezeigt. (Stellen Sie sicher, dass Sie nur das location Element und nicht das umgebende Markup hinzufügen, das hier nur angezeigt wird, um einen bestimmten Kontext bereitzustellen.)

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <location path="elmah.axd" xdt:Transform="Insert">
      <system.web>
        <authorization>
          <allow roles="Administrator" />
          <deny users="*" />
        </authorization>
      </system.web>
    </location>
</configuration>

Der Transform Attributwert von "Insert" bewirkt, dass dieses location Element als gleichgeordnetes Element zu allen vorhandenen location Elementen in der Datei "Web.config " hinzugefügt wird. (Es gibt bereits ein location Element, das Autorisierungsregeln für die Seite "Guthaben aktualisieren" angibt.) Wenn Sie die Produktionswebsite nach der Bereitstellung testen, testen Sie, ob diese Autorisierungsregel wirksam ist.

Sie müssen den Fehlerprotokollzugriff in der Testumgebung nicht einschränken, sodass Sie diesen Code nicht der Datei "Web.Test.config " hinzufügen müssen.

Hinweis

Sicherheitshinweis zeigt niemals Fehlerdetails für die Öffentlichkeit in einer Produktionsanwendung an, oder speichern Sie diese Informationen an einem öffentlichen Speicherort. Angreifer können Fehlerinformationen verwenden, um Sicherheitsrisiken auf einer Website zu ermitteln. Wenn Sie ELMAH in Ihrer eigenen Anwendung verwenden, sollten Sie prüfen, wie ELMAH konfiguriert werden kann, um Sicherheitsrisiken zu minimieren. Das ELMAH-Beispiel in diesem Lernprogramm sollte nicht als empfohlene Konfiguration betrachtet werden. Es ist ein Beispiel, das ausgewählt wurde, um zu veranschaulichen, wie ein Ordner behandelt wird, in dem die Anwendung Dateien erstellen kann.

Festlegen eines Umgebungsindikators

Ein häufiges Szenario besteht darin, dass Die Dateieinstellungen von Web.config in den einzelnen Umgebungen, für die Sie bereitstellen, unterschiedlich sein müssen. Beispielsweise benötigt eine Anwendung, die einen WCF-Dienst aufruft, möglicherweise einen anderen Endpunkt in Test- und Produktionsumgebungen. Die Contoso University-Anwendung enthält auch eine Einstellung dieser Art. Diese Einstellung steuert einen sichtbaren Indikator auf den Seiten einer Website, die Ihnen angibt, in welcher Umgebung Sie sich befinden, z. B. Entwicklung, Test oder Produktion. Der Einstellungswert bestimmt, ob die Anwendung "(Dev)" oder "(Test)" an die Hauptüberschrift auf der Gestaltungsvorlage "Site.Master " anfügen soll:

Environment_indicator

Der Umgebungsindikator wird ausgelassen, wenn die Anwendung in der Produktion ausgeführt wird.

Die Webseiten der Contoso University lesen einen Wert, der in appSettings der Datei "Web.config " festgelegt ist, um zu bestimmen, in welcher Umgebung die Anwendung ausgeführt wird:

<appSettings>
    <add key="Environment" value="Dev" />
</appSettings>

Der Wert sollte in der Testumgebung "Test" und "Prod" in der Produktionsumgebung sein.

Öffnen Sie Web.Production.config , und fügen Sie ein appSettings Element unmittelbar vor dem öffnenden Tag des location Zuvor hinzugefügten Elements hinzu:

<appSettings>
    <add key="Environment" value="Prod" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>

Der xdt:Transform Attributwert "SetAttributes" gibt an, dass der Zweck dieser Transformation das Ändern von Attributwerten eines vorhandenen Elements in der Web.config-Datei ist. Der xdt:Locator Attributwert "Match(key)" gibt an, dass das zu ändernde Element das Attribut ist, dessen key Attribut dem key hier angegebenen Attribut entspricht. Das einzige andere Attribut des add Elements ist value, und das ist, was in der bereitgestellten Web.config-Datei geändert wird. Dieser Code bewirkt, dass das value Attribut des appSettings Environment Elements in der Web.config-Datei, die für die Produktion bereitgestellt wird, auf "Prod" festgelegt wird.

Wenden Sie als Nächstes dieselbe Änderung auf die Datei "Web.Test.config " an, mit der Ausnahme, dass "Test" anstelle von "Prod" festgelegt value ist. Wenn Sie fertig sind, sieht der appSettings Abschnitt in Web.Test.config wie im folgenden Beispiel aus:

<appSettings>
    <add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>

Deaktivieren des Debugmodus

Für einen Releasebuild möchten Sie das Debuggen unabhängig davon, für welche Umgebung Sie bereitstellen, nicht aktiviert sein. Standardmäßig wird die Transformationsdatei "Web.Release.config " automatisch mit Code erstellt, der das debug Attribut aus dem compilation Element entfernt:

<system.web>
  <compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>

Das Transform Attribut bewirkt, dass das debug Attribut bei jeder Bereitstellung eines Releasebuilds aus der bereitgestellten Web.config-Datei weggelassen wird.

Diese Transformation befindet sich in Test- und Production-Transformationsdateien, da Sie sie durch Kopieren der Releasetransformationsdatei erstellt haben. Sie benötigen es dort nicht dupliziert. Öffnen Sie also jede dieser Dateien, entfernen Sie das Kompilierungselement , speichern und schließen Sie jede Datei.

Festlegen von Verbindungszeichenfolgen

In den meisten Fällen müssen Sie keine Verbindungszeichenfolge Transformationen einrichten, da Sie Verbindungszeichenfolge im Veröffentlichungsprofil angeben können. Es gibt jedoch eine Ausnahme, wenn Sie eine SQL Server Compact-Datenbank bereitstellen und Entity Framework Code First-Migrationen verwenden, um die Datenbank auf dem Zielserver zu aktualisieren. Für dieses Szenario müssen Sie eine zusätzliche Verbindungszeichenfolge angeben, die auf dem Server zum Aktualisieren des Datenbankschemas verwendet wird. Um diese Transformation einzurichten, fügen Sie ein <connectionStrings-Element unmittelbar nach dem öffnenden< Konfigurationstag> in den Transformationsdateien> "Web.Test.config" und "Web.Production.config" hinzu:

<connectionStrings>
  <add name="SchoolContext_DatabasePublish" connectionString="Data Source=|DataDirectory|School-Prod.sdf" providerName="System.Data.SqlServerCe.4.0" xdt:Transform="Insert"/>
</connectionStrings>

Das Transform Attribut gibt an, dass diese Verbindungszeichenfolge dem connectionStrings-Element in der bereitgestellten Web.config-Datei hinzugefügt wird. (Der Veröffentlichungsprozess erstellt diese zusätzliche Verbindungszeichenfolge automatisch für Sie, wenn er nicht vorhanden ist, aber standardmäßig wird das ProviderName-Attribut auf System.Data.SqlClientfestgelegt, das für SQL Server Compact nicht funktioniert. Durch manuelles Hinzufügen der Verbindungszeichenfolge können Sie den Bereitstellungsprozess daran hindern, ein Verbindungszeichenfolge Element mit dem falschen Anbieternamen zu erstellen.)

Sie haben nun alle Web.config-Transformationen angegeben, die Sie für die Bereitstellung der Contoso University-Anwendung zum Testen und Zur Produktion benötigen. Im folgenden Lernprogramm kümmern Sie sich um Bereitstellungssetupaufgaben, die das Festlegen von Projekteigenschaften erfordern.

Weitere Informationen:

Weitere Informationen zu Themen, die in diesem Lernprogramm behandelt werden, finden Sie im Szenario für die Web.config-Transformation in ASP.NET Bereitstellungsinhaltszuordnung.