2 Stimmen

Woher liest meine .net-Assembly ihre Konfiguration, wenn sie als COM gehostet wird?

Ok, ich habe eine .net-Assembly erstellt und sie funktioniert gut auf meiner asp.net-Website. Ich möchte es jetzt als COM hosten, so dass ich es auf einer alten Legacy-Asp-Website verwenden kann. Es funktioniert irgendwie, außer es wird nicht lesen die appsettings aus der Konfigurationsdatei.

Ich würde denken, dass sie aus dem gleichen Ordner gelesen werden sollte, in dem ich meine Assembly mit Regasm registriert habe und in dem sich die .dll befindet. Ich habe versucht, die Konfigurationsdatei in zwei zusätzliche Dateien zu kopieren (für den Fall, dass sie aus einer anders benannten Datei als "assembly-file-name "+.config gelesen wird). Die beiden Dateien sind app.config und application.config - es scheint aus keiner von ihnen zu lesen.

Woher liest meine .net-Assembly ihre Konfiguration, wenn sie als COM gehostet wird?

1voto

Alfred Myers Punkte 6276

Wenn Sie mit COM eine COM-Anwendung meinen, dann sollten Sie Ihre Konfiguration in einer Datei ablegen, die nach der EXE benannt ist. IhreApp.Exe -> IhreApp.exe.config

Wenn Sie mit COM COM+ meinen, dann sehen Sie sich http://blogs.msdn.com/heikkiri/archive/2005/11/10/491568.aspx

0voto

Thorsten Dittmar Punkte 54284

Korrigieren Sie mich, wenn ich falsch liege, aber ich glaube nicht, dass eine DLL überhaupt eine Konfigurationsdatei liest. Auch wenn Sie technisch gesehen puede eine Konfigurationsdatei für DLL-Projekte zu erstellen (unter Verwendung der Projekteigenschaften), ich glaube nicht, dass man eine DLL so konfigurieren soll, und ich glaube nicht, dass das Framework das unterstützt.

Jetzt gibt es zwei Möglichkeiten:

  1. Der Aufrufer soll den Objekten die jeweiligen Einstellungswerte als Parameter übergeben
  2. Erstellen Sie eine Methode, die die Einstellungen selbst liest, und rufen Sie die Methode nach der Erstellung des Objekts auf.

EDIT
Um das zu überprüfen, sollten Sie die Konfigurationsdatei so benennen application-name.config.xml wie bei einer WebForms-Anwendung. Aber wie gesagt, ich bezweifle, dass es funktionieren wird...

0voto

Ok, ich habe eine Lösung gefunden, die mich glücklich macht.

Am Ende habe ich das COM-Objekt in Component Services gehostet. Auf dem Paket wählte ich Eigenschaften und die Registerkarte Aktivierung, dort gab ich den Speicherort meiner Konfigurationsdatei in "Application Root Directory" ein. Damit es nun funktioniert, musste ich meine Konfigurationsdatei in application.config umbenennen und irgendwie musste ich auch eine neue Datei am gleichen Ort namens application.manifest mit den folgenden Daten erstellen:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
</assembly>

Dies löst das Problem, dass "die DLL" die Konfigurationsdatei liest - da die Komponentendienste der Host sind (anstelle der Exe/Website), bestimmen sie den Speicherort/die Konfiguration.

Woop - und danke für den Beitrag, Leute - ich hatte nicht an das von Thorsten erwähnte Problem gedacht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X