2010-03-04 10 views
10

Was ist ein guter Ansatz zum Verwalten einer Debug- und Release-Verbindungszeichenfolge in einer .NET/SQLServer-Anwendung?Verwalten einer Debug- und Release-Verbindungszeichenfolge

Ich habe zwei SQL Server, eine Produktion und ein Build/Debug und ich brauche eine Methode der Umschaltung zwischen den beiden, wenn meine ASP.NET-Anwendung bereitgestellt wird.

Derzeit speichere ich sie einfach in der web.config und kommentiere das eine oder andere aus, aber das ist fehleranfällig beim Deployment.

Antwort

13

Erstellen Sie eine Debug- und eine Release-Version der Datei Web.config, z. Web.debug.config und Web.release.config. Fügen Sie dann eine Vorkompilierungsbedingung hinzu, die die relevante Version basierend auf dem aktuellen Ziel in die web.config kopiert.

Bearbeiten: Um die Vorkompilierungsbedingung hinzuzufügen, klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie "Eigenschaften". Gehen Sie dann zur Registerkarte "Build Events" und fügen Sie den folgenden Code zur Vorkompilierungsbedingung hinzu. Natürlich müssen Sie den Code an Ihre Bedürfnisse anpassen, siehe Abbildung unten.

@echo off 

echo Configuring web.config pre-build event ... 

if exist "$(ProjectDir)web.config" del /F/Q "$(ProjectDir)web.config" 

if "$(ConfigurationName)" == "Debug Test" goto test 
if "$(ConfigurationName)" == "Debug M" goto M 
if "$(ConfigurationName)" == "Debug BA" goto BA 
if "$(ConfigurationName)" == "Release Test" goto test 
if "$(ConfigurationName)" == "Release M" goto M 
if "$(ConfigurationName)" == "Release BA" goto BA 

echo No web.config found for configuration $(ConfigurationName). Abort batch. 
exit -1 
goto :end 

:test 
copy /Y "$(ProjectDir)web.config.test" "$(ProjectDir)web.config" 
GOTO end 

:BA 
copy /Y "$(ProjectDir)web.config.BA" "$(ProjectDir)web.config" 
GOTO end 

:M 
copy /Y "$(ProjectDir)web.config.M" "$(ProjectDir)web.config" 
GOTO end 

:end 
echo Pre-build event finished 

Project Properties http://img442.imageshack.us/img442/1843/propsa.jpg

+0

Ich denke, das ist ein guter Vorschlag. Können Sie näher erläutern, wie Sie einem VS-2008-Projekt eine Vorkompilierungsbedingung hinzufügen? Ich verwende kein MSBuild oder einen anderen Build-Prozess. Ich säubere/baue es einfach um und stelle es in Visual Studio bereit. –

+0

@roygbiv: siehe bearbeiten. – AxelEckenberger

+0

Danke Freund. Ihre Methode und der Beispielcode haben diese Aufgabe kurz erledigt. –

2

Normalerweise setze ich eine Umgebungsvariable auf meinen Produktionsservern, die angibt, dass der Server ein Produktionsserver ist. Ich lese dann die korrekte Verbindungszeichenfolge aus meiner web.config basierend darauf, ob diese Umgebungsvariable existiert und auf den Produktionswert gesetzt ist.

+0

+1 Ich mag die Idee, etwas auf dem Server selbst zu ändern. Dies scheint weniger fehleranfällig als die anderen Ansätze. –

+0

Vielen Dank für diesen Vorschlag. Es ist vielleicht das praktischste und bequemste. –

+0

Ich habe nie an diesen gedacht. –

0

Nun vielleicht ist das ein wenig veraltet, aber die ODBC DSN löst dieses Problem ziemlich gut - ich benutze immer noch - mit Rigor - DNS-Einstellungen, um zwischen Produktion und Debug-Umgebungen zu unterscheiden.

p.s., erwarte ich eine Menge von Down-Stimmen, vielleicht wird dies ein Maß dafür sein, was die Leute über eine Ebene der Indirektion für Datenbank-Identifikatoren denken.

+0

Während ich nicht glaube, dass deine Antwort einen Downvote verdient, möchte ich wirklich nicht auf die DSN-Route gehen. –

8

Die gute Nachricht ist, dass .NET4 a provision für genau das hat, können Sie separate Konfigurationen für jede Konfiguration haben (web.Release.config, web.Debug.config).

Die schlechte Nachricht ist ... Sie verwenden das wahrscheinlich noch nicht.

+0

Sie sind richtig, ich benutze nicht .NET 4 :( –

+0

Bald ... sehr bald ... :) – jjxtra

4

Verwenden Präprozessordirektiven: Wenn Ihr Projekt konfiguriert ist, in den Debug-Modus, die Debug-Verbindungszeichenfolge gewählt wird ausgeführt, andernfalls wird die Release-Verbindungszeichenfolge automatisch gewählt wird.

In Visual Studio werden Sie feststellen, dass Anweisungen ausschließlich gemäß der Projektkonfiguration (debuggen oder release) abgeblendet werden.

Genau so etwas wie die folgenden in Ihrem Code hinzufügen:

string myConnectionString; 
#if DEBUG 
    myConnectionString = "your debug connection string";//may be read from your debug connection string from the config file 
#else 
    myConnectionString = "your release connection string"; //may be read from your relase connection string from the config file 
#endif 

für weitere Einzelheiten, this überprüfen.

1

Ich verwende eine Kombination von Samehs und Obalix-Methode in .net 3.5.

Dann definiere ich in meinen Projekteigenschaften die richtigen bedingten Kompilierungssymbole. Auf diese Weise muss ich meine Verbindungszeichenfolgen nicht wie Samehs hart codieren, aber der Code sucht nur nach der Zeichenkette, basierend darauf, wie sie aufgebaut wurde. Dadurch kann ich (wenn nötig) eine Konfigurationsdatei für alle Builds haben, aber in Wirklichkeit stelle ich die Konfigurationsdateien nicht in meinem Build-Prozess bereit.Obwohl das bedingte app.Relase.config Zeug für .net 4 sieht aus wie der richtige Weg in die Zukunft zu gehen.

0

Ich kann andere Lösung für dieses Problem sagen. In csproj Datei Datei erstellen folow:

<Content Include="DB.config"> 
    <SubType>Designer</SubType> 
</Content> 
    <Content Include="DB.Debug.config"> 
    <DependentUpon>DB.config</DependentUpon> 
    <SubType>Designer</SubType> 
</Content> 
    <Content Include="DB.Release.config"> 
    <DependentUpon>DB.config</DependentUpon> 
    <SubType>Designer</SubType> 
</Content> 

in xml die zwei Version für die Freigabe und Debug-Satz geschrieben.

Verwandte Themen