2013-06-18 4 views
9

Ich habe eine Web.Api-Anwendung, die Funktionen aus einer anderen Assembly verwendet. Für diese Assembly habe ich eine .config-Datei erstellt, in der ich einige Zeichenfolgen ablege.dll.config nicht in temporäre asp.net-Dateien kopiert Ordner

ich den folgenden Code verwenden, die einen dieses Strings holen sollte:

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

Assembly.GetExecutingAssembly().Location Punkte auf temporäre asp.net-Dateien (C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporäre ASP.NET-Dateien \ root \ dc2fa3d4 \ 834ee436 \ assembly \ dl3 \ cd068512) aber meine dll.config-Datei wird dort nicht kopiert. Das Ergebnis ist, dass ich meine Anwendung nicht debuggen kann und es gibt auch null, wenn der Code auf einem echten IIS-Server ausgeführt wird.

Wenn ich einen Unterbrechungspunkt vor der Einstellung setze, kann ich den temporären Ordner finden, und wenn ich meine dll.config-Datei dort kopiere, funktioniert alles, aber wie soll ich das automatisch tun.

Ich habe die Eigenschaften für meine dll.config-Datei festgelegt als „Aktion Körperbau: Inhalt“, „zum Ausgabeverzeichnis kopieren: immer“

Jede Hilfe würde geschätzt, hat stundenlang gegoogelt jetzt. ! :(

Mit freundlichen Grüßen, Peter Larsson

Antwort

17

Ich löste dies durch den folgenden Code:

// 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; 

Der Schlüssel ist:

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

kam ich mit, dass bis Lösung nach hier Zhaph - Ben Duguid ‚s Antwort zu lesen. https://stackoverflow.com/a/2434339/103778

Jetzt kann ich die Konfigurationsdatei meiner DLL abrufen, die sich im Verzeichnis bin meiner Web-App befindet.

Ich habe seit written up a blog post dies weiter zu diskutieren.

+0

Aha, ich muss das überprüfen ... danke für den Vorschlag! –

+0

Arbeitete für mich. Danke für den Tipp! –

+0

Das hat mir sehr geholfen. Ich habe auch bemerkt, dass der Aufruf von GetName() nutzlos ist, da die Eigenschaft CodeBase auch eine Eigenschaft der Klasse Assembly ist. – sluki