Ich habe eine Konfigurationsdatei, die ich im Rahmen der Ausführung einer DLL, die ich schreibe, laden muss.
Das Problem, das ich habe, ist, dass der Ort, an dem ich die DLL- und Konfigurationsdatei abgelegt habe, nicht der "aktuelle Speicherort" ist, wenn die App ausgeführt wird.
Zum Beispiel habe ich die DLL- und XML-Datei hier abgelegt:
D: \ Programme \ Microsoft Team Foundation Server 2010 \ Anwendungsebene \ Webdienste \ bin \ Plugins
Aber wenn ich versuche, auf die XML-Datei (in meiner DLL) wie folgt zu verweisen:
XDocument doc = XDocument.Load(@".\AggregatorItems.xml")
dann . \ AggregatorItems.xml übersetzt in:
C: \ windows \ system32 \ inetsrv \ AggregatorItems.xml
Ich muss also einen Weg finden (ich hoffe), um zu wissen, wo sich die DLL befindet, die gerade ausgeführt wird. Grundsätzlich suche ich das:
XDocument doc = XDocument.Load(CoolDLLClass.CurrentDirectory+@"\AggregatorItems.xml")
C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\Temporary ASP.NET Files\\tfs\\de3c0c8e\\c1bdf790\\assembly\\dl3\\20b156cb\\22331f24_bfb9cb01\\AggregatorItems.xml
Assembly.GetExecutingAssembly().CodeBase
hat es!string curAssemblyFolder = new System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath;
Reflexion ist dein Freund, wie bereits erwähnt wurde. Sie müssen jedoch die richtige Methode verwenden.
quelle
In meinem Fall (Umgang mit meinen Assemblys, die [als Datei] in Outlook geladen wurden):
Beachten Sie die Verwendung von
CodeBase
(nichtLocation
) auf derAssembly
. Andere haben auf alternative Methoden zum Lokalisieren der Baugruppe hingewiesen.quelle
quelle
Wenn Sie mit einer asp.net-Anwendung arbeiten und bei Verwendung des Debuggers Assemblys suchen möchten, werden diese normalerweise in einem temporären Verzeichnis abgelegt. Ich habe diese Methode geschrieben, um bei diesem Szenario zu helfen.
Weitere Informationen finden Sie in diesem Blogbeitrag unter http://nodogmablog.bryanhogan.net/2015/05/finding-the-location-of-a-running-assembly-in-net/
Wenn Sie den Quellcode nicht ändern oder erneut bereitstellen können, aber die auf dem Computer ausgeführten Prozesse untersuchen können, verwenden Sie den Prozess-Explorer. Ich geschrieben , um eine detaillierte Beschreibung hier .
Es werden alle ausführenden DLLs auf dem System aufgelistet. Möglicherweise müssen Sie die Prozess-ID Ihrer laufenden Anwendung ermitteln. Dies ist jedoch normalerweise nicht allzu schwierig.
Ich habe eine vollständige Beschreibung der Vorgehensweise für eine DLL in IIS geschrieben - http://nodogmablog.bryanhogan.net/2016/09/locating-and-checking-an-executing-dll-on-a-running-web -Server/
quelle