2013-06-18 9 views
9

Mam aplikację Web.Api, która używa funkcji z innego zestawu. Dla tego zestawu utworzyłem plik .config, w którym przechowuję niektóre ciągi.plik dll.config nie został skopiowany do tymczasowego folderu plików asp.net

używam następujący kod, który powinien pobierał jeden z tych ciągów:

private static string LogUrl = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings.Settings["WebApi-LogUrl"].Value.ToString(); 

Assembly.GetExecutingAssembly().Location punkty do tymczasowych plików ASP.NET, (C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Tymczasowe pliki ASP.NET \ root \ dc2fa3d4 \ 834ee436 \ assembly \ dl3 \ cd068512), ale mój plik dll.config nie jest tam kopiowany. Powoduje to, że nie mogę debugować aplikacji, a także daje wartość null podczas uruchamiania kodu na prawdziwym serwerze IIS.

Jeśli ustawię punkt przerwania tuż przed uzyskaniem ustawienia, mogę uzyskać dostęp do folderu tymczasowego, a kiedy skopiuję plik dll.config tam wszystko działa, ale jak mam to zrobić automatycznie.

mam właściwości dla mojego pliku dll.config ustawiony jako „Build działania: zawartość”, „Kopiuj do katalogu wyjściowego: zawsze”

Każda pomoc będzie mile widziane, nie googled dla godzin teraz. ! :(

poważaniem, Peter Larsson

Odpowiedz

17

I rozwiązać to za pomocą następującego kodu:

// The dllPath can't just use Assembly.GetExecutingAssembly().Location as ASP.NET doesn't copy the config to shadow copy path 
var dllPath = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase).LocalPath; 
var dllConfig = ConfigurationManager.OpenExeConfiguration(dllPath); 

// Get the appSettings section 
var appSettings = (AppSettingsSection) dllConfig.GetSection("appSettings"); 
return appSettings.Settings; 

Klucz znajduje się:

new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase).LocalPath 

wymyśliłem że rozwiązanie po przeczytaniu odpowiedzi Zhaph - Ben Duguid tutaj: https://stackoverflow.com/a/2434339/103778.

Teraz jestem w stanie odebrać plik konfiguracyjny mojego DLL, który znajduje się w katalogu bin mojej aplikacji internetowej.

Mam od written up a blog post omawiania tego dalej.

+0

Aha, muszę to sprawdzić ... dzięki za sugestię! –

+0

Pracowałem dla mnie. Dzięki za wskazówkę! –

+0

Bardzo mi to pomogło. Zauważyłem również, że wywołanie funkcji GetName() jest bezużyteczne, ponieważ właściwość CodeBase jest również własnością klasy Assembly. – sluki

Powiązane problemy