C# Verweispfad für nach dem kompilieren festlegen?

domidragon

Fleet Admiral
Registriert
Juli 2008
Beiträge
11.532
Huhu

Kennt einer eine Möglichkeit die Bibliotheken manuell angeben zu können?

In C++ kann man da ja per Linker machen, in C# macht der das ja alles automatisch, daher suche ich die richtige "Einstellung" um dies manuel machen zu können.

Situation:
Eine Anwendung hat bibliothek a,b,c,d,e,f. a,b und c befinden sich bereits im system ordner, wird also auf nem anderem rechner als der entwicklerrechner ohen probleme gefunden. die dll's d, e unf f sind aber eigene Bibliotheken und müssten im ausführungsordner oder im system ordner sein. da diese aber relativ gross sind und bei jeder anwendung immer wieder mal nutzen finden, sollen sie an einem ort gespeichert werden und von dort aus für alle anwendungen die diese DLL's brauchen dienen. (beispiel C:/dlls)

wie kann ich Visual Studio/C# sagen, er soll die DLL's d-f an diesem pfad suchen gehen, wenn die anwendung gestartet wird?

die windowsvariablen sind ungünstig, da man dann bei jeder installation diese hinzufügen müsste...

dankö

greez

PS: die projektoption "verweispfade" in visual studio ist es leider nicht ;)
 
Man kann sich ein Ereignis werfen lassen: AppDomain.CurrentDomain.AssemblyResolve
Dort hat man die Möglichkeit den Pfad nach belieben neu festzulegen und die Bibliothek dann selber mit Assembly.Load zu laden. Dieses Ereignis tritt nur dann auf wenn die entsprechende DLL nicht gefunden werden konnte.

Alternativ kann man auch einfach AppDomain.CurrentDomain.AppendPrivatePath(@"c:\DLLs"); festlegen wo die CLR noch nach Bibliotheken suchen soll.

Oder gleich mit rein in die AppConfig:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="c:\DLLs" />
</assemblyBinding>
</runtime>
</configuration>
 
Zuletzt bearbeitet:
Wie funktioniert das denn bei Dienstverweisen?

Aktuell habe ich meinen Dienstverweis fest in das Programm eingebunden und auf die entsprechende WSDL-Datei verwiesen.

Kann ich die URL zum Dienst irgendwie auch im Nachheinein im Quelltext zuweisen? Dann könnte ich später nämlich den Pfad in einer XML-Datei hinterlegen ....
 
Du kannst die Assemblies auch mit einem eigenen strong name key signieren und dann mit gacutil in den global assembly cache (GAC) auf dem zielsystem packen. Dort können auch mehrere versionen der gleichen assembly liegen, und der C#-Compiler schreibt ins manifest deiner Anwendung, welche von denen zur Laufzeit zu nehmen ist.
 
voodoo44 schrieb:
Wie funktioniert das denn bei Dienstverweisen?

Das ist bei einen Dienstverweis nicht wirklich einfach da bereits bei Angabe der URL im Visual Studio dazu führt, das eine Proxy-Klasse erstellte wird die den Schnittstellen entspricht die in der WSDL Datei beschrieben werden. Damit ist diese Schnittstellen-Klasse ein fester Bestandteil des Programmcodes. Die URL zum Dienst kann dagegen verändert, was aber voraussetzt das unter der fremden URL ähnliche Schnittstellen existieren.
 
Der Dienst, der an der anderen URL läuft, wäre exakt der gleiche.
Es wäre nur die URL, die sich ändert. Jemand Tipps?

(Achso - und sorry, dass ich hier den "Verweise"-Thread missbrauche)
 
Ich könnte mich Irren, aber ich glaube im Konstruktor der WSDL-Proxy-Klasse sieht in etwas so aus:

Code:
public meineAPI_wsdl() 
{
    this.Url = "http://demo.ttest.de/test/soap/server.php";
}

Jetzt könntest du dir z.B. einfach einen zweiten Konstruktor reinschreiben:

Code:
public meineAPI_wsdl(string andereUrl) 
{
    this.Url = andereUrl;
}

... und kannst damit beim erstellen einer Instanz bestimmen an welche URL er sich wenden soll.
 
Ich habe das bei einer C#-Anwendung mal beobachtet.
Afair sucht die Anwendung zuerst bei sich im Verzeichnis, danach schaut sie ob die Bibliotheken nicht schon im System eingebunden sind.

Hast du es schonmal so versucht und einmal ohne Festlegung?
 
Zurück
Oben