Mam projekt aplikacji sieci Web ASP.NET, który łączy się ze zdalną bazą danych za pośrednictwem Entity Framework. Podczas debugowania (np. Uruchomienie projektu na moim komputerze lokalnym) adres IP do bazy danych jest inny niż podczas wydania (np. Po przesłaniu projektu na mój serwer internetowy i uruchomieniu go z przeglądarki). Do tej pory zawsze ręcznie zmieniałem ciąg połączenia z bazą danych w pliku Web.config, aby przełączać się między tymi dwoma (w zasadzie musiałem tworzyć ciągi połączeń, jeden o nazwie "Debugowanie" i jeden "Release", a ja po prostu zamieniłem się po nazwach za każdym razem, gdy wdrażałem).Web.config Kompilacja vs Zwolnienie transformacja nie działa
Teraz właśnie zauważyłem, że powinno to być możliwe, aby stało się to automatycznie poprzez Web.config Transformation Syntax, gdzie wstawisz zmodyfikowany ciąg połączenia w wersji Web.Release.config, a następnie powinieneś go użyć, gdy biblioteka DLL jest zbudowana w konfiguracji Release .
Jednak nie wydaje się, aby pracować dla mnie ...
Oto odpowiednia część mojego zwykłego pliku Web.config (które posiada ciąg połączenia Debug dla lokalnego wykorzystania):
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<!-- Debug connection string. Release connection string is in Web.Release.config file -->
<add name="DatabaseEntities" connectionString="A" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Oto plik Web.Release.config, który według przykładów należy zastąpić ciąg połączenia „DatabaseEntities” „A” z „B”, jeśli biblioteka DLL jest w trybie wydania:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!-- Replace the DatabaseEntities connection string with the Release version (local IP address) -->
<connectionStrings>
<add name="DatabaseEntities"
connectionString="B"
xdt:Transform="Replace" xdt:Locator="Match(name)"/>
</connectionStrings>
</configuration>
(Oczywiście "A" i "B" są po prostu uchwytami do rzeczywistych połączeń)
Kiedy debuguję aplikację (np. po prostu naciśnij F5) używany jest domyślny Web.config i mogę uzyskać dostęp do bazy danych. Następnie zmieniam konfigurację kompilacji na Release za pośrednictwem programu Configuration Manager. Wszystkie projekty w rozwiązaniu mają konfigurację Release. Następnie buduję rozwiązanie (tylko przez kompilację lub nawet przez kompletną przebudowę (np. Oczyść, przebuduj)). Przesyłam nowo utworzone biblioteki DLL na serwer WWW, a także pliki Web.config i Web.Release.config, a gdy próbuję uzyskać dostęp do bazy danych, nie jestem w stanie, nadal próbuje uzyskać dostęp do bazy danych poprzez adres IP debugowania i dlatego nie może go znaleźć ...
Wygląda na to, że plik Web.Release.config jest całkowicie ignorowany lub przynajmniej ciąg połączenia nie jest zastępowany.
Co robię źle? Czy składnia transformacji jest niewłaściwa? Czy nie buduję poprawnie aplikacji w trybie Release?
dzięki za pomoc ...
Może to być czasami trochę trudne, jeśli otrzymasz jedno błędne ustawienie, nie będzie działać. Jeśli możesz dodać zrzut ekranu Menedżera konfiguracji, możemy zobaczyć coś, co przeoczyłeś. –
Ten post pomógł mi: [http://stackoverflow.com/questions/3305096/how-can-i-use-web-debug-config-in-the-built-in-visual-studio-debugger-server] [1] [1]: http://stackoverflow.com/questions/3305096/how-can-i-use-web-debug-config-in-the-built-in-visual-studio -debugger-server –