| 

.NET C# Java Javascript Exception

5
Hallo,

ich habe eine Anwendung in C# geschrieben, die einige andere Assemblies einbindet.
Standardmäßig werden diese leider im selben Verzeichnis wie die Anwendung abgelegt. Ein auslagern in den Global Assembly Cache möchte ich nicht!

Nach kurzer Recherche im Web, habe ich erfahren, dass man einen "private binpath" setzen kann, der dann als Root-Suchpfad für diese Application benutzt wird. Leider steht nicht mit dabei wo man diesen setzt. Ich würde dann ein Unterverzecihnis anlegen, wo die ganzen Assemblies rein kommen.

Habe da mal bei den Verweispfaden rumgespielt...nur leider werden diese immer absolut übernommen ...ich bräuchte das aber relativ zum ApplicationPath. Wo könnte man das setzen?

Edit:
Die Sache mit dem probing-Element in der app.config ist genau das was ich möchte. (siehe http://msdn.microsoft.com/de-de/library/4191fzwb(VS.80).aspx) Nur leider funktioniert es irgend einem kühlen Grund bei mir nicht.

Lösung:
Habe im Web gesucht und bin auf verschieden Versionen von app.config Dateien gestoßen.
Zum einen ohne Namensraumprefix:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns:asm="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="shared" />
</assemblyBinding>
</runtime>
</configuration>


und mit Namensraumprefix:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<asm:assemblyBinding xmlns:asm="urn:schemas-microsoft-com:asm.v1">
<asm:probing privatePath="shared" />
</asm:assemblyBinding>
</runtime>
</configuration>


Bei mir hat der Namensraumprefix Wunder bewirkt und seit dem funktioniert es. Nur leider kann ich es nicht erklären ;(

MfG Blue
News:
12.10.2009
Blue 321 5
Funktioniert es denn, wenn du die Assemblies in dasselbe Verzeichnis wie deine Applikation legst? Eventuell ist gar nicht das Probing das Problem, sondern das Nachladen funktioniert generell nicht. Andere Frage: Bekommst du irgendeine Exception?
codemurai 13.10.2009
Ja es funktioniert alles wenn die Assemblies mit dem Programm selbst im gleichen Verzeichnis liegen, aber genau das möchte ich nicht - einfach aus organisatorischen Gründen. So habe ich alle "Bibliothek-Assemblies" im Unterverzeichnis "shared" und alle Programme eine Ebene höher. ;-) Exception, tritt keine auf, es sei denn er kann die Assemblies nicht finden. Mit dem Eintrag in der app.conf stelle ja ich das aber sicher. Was ich mich nur noch frage ist, warum das Prefix "asm:" bei mir verwendet werden muß, damit es funktioniert.
Blue 14.10.2009
2 Antworten
2
Habs nicht durchgelesen.
Aber es scheint sich um dein Problem zu handeln.
How the Runtime Locates Assemblies

Und das vielleicht auch.
AppDomain.AppendPrivatePath Method
12.10.2009
GENiALi 2,0k 2 8
Auf deinen ersten Link bin ich auch gestoßen, nur leider funktioniert das bei mir irgendwie nicht. Das mit der AppendPrivatePath() ist laut MSDN depricated. Allerdings schreibt Microsoft auch, dass man AppDomainSetup stattdessen verwenden soll, aber die Änderunegn sich dann nicht mehr auf eine bestehende AppDomain beziehen ;-(
Blue 12.10.2009
1
Ich glaube, dass das dann geht, wenn Du für die hinzuzuladenden Assemblies eine eigene AppDomain verwendest. Beim Erzeugen und Konfigurieren der AppDomain kannst Du diese Pfade einstellen.

Allerdings hat das glaube ich den Nachteil, dass die Objekte dann von
MarshalByRefObject
abstammen müssen, weil Sie bei Kommunikation zwischen AppDomains serialisiert und deserialisiert werden - oder so ähnlich hab ich da was in Erinnerung...
13.10.2009
balu 216 1 3

Stelle deine .net-Frage jetzt!