Laden...

Kann man bei Unity irgendwie den Pfad für die zu ladenen Dll's mitgeben?

Erstellt von Howard vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.184 Views
Howard Themenstarter:in
84 Beiträge seit 2007
vor 13 Jahren
Kann man bei Unity irgendwie den Pfad für die zu ladenen Dll's mitgeben?

Hallo Leudde,

wir benutzen hier "Microsoft.Practices.Unity" und den Common Service Locator library das funktioniert soweit auch alle wie es sein muss. Nur leider gibt es im zusammenhang mit Access2003 irgendwie Probleme. Da Access das startende Programm ist nimmt sich die ganze Anwendung den Office11 Ordner irgendwie als Startverzeichniss. Da wir die gleichen Probleme auch schon beim "alten" RalfW.Microkernel hatten haben wir beim initialisieren unserer C# Dll's als erstes mal das Environment.CurrentDirectory umgestellt damit immer UNSERER Arbeitspfad genommen wird und ebend NICHT der Office Ordner. Leider interessiert sich Unity irgendwie überhaupt nicht dafür. Die DLL's werden weiterhin im Office Ordner erwartet.
Wir laden die Dll's über eine XML Datei nicht aus dem Code herraus.
Hat irgendwer irgendwie ne Idee??

Howard

Howard Themenstarter:in
84 Beiträge seit 2007
vor 13 Jahren

als Nachtrag: auch

AppDomain.CurrentDomain.SetData("APPBASE",@"....");

hat nix gebracht

Howard

2.891 Beiträge seit 2004
vor 13 Jahren

Mal Application.StartupPath probiert?
EDIT: Arg, kann man ja gar nicht drauf schreiben...

Was passiert denn, wenn versucht wird, die Assemblies aus dem falschen Verzeichnis zu laden? Gibt es eine FileNotFound-Exception? Dann könnte dir das AppDomain.AssemblyResolve-Ereignis (System) helfen.

Gruß,
dN!3L

0
767 Beiträge seit 2005
vor 13 Jahren

Kannst du den probing Pfad auf deinen erweitern?


<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2\subbin;bin3"/>
      </assemblyBinding>
   </runtime>
</configuration>

siehe MSDN

loop:
btst #6,$bfe001
bne.s loop
rts

Howard Themenstarter:in
84 Beiträge seit 2007
vor 13 Jahren

@0815Coder: gute Idee aber das ganze gilt ja nur für Unterverzeichnisse der Aktuellen Ordners...der ja wie bekannt ...Office11 ist...also das geht so leider nich...
Habe allerdings in der Hilfe noch eine weitere Möglichkeit entdeckt, wie man in der Config sagen kann, wo die entsprechende Assembly liegt:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<runtime>
		<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
			<dependentAssembly>
				<assemblyIdentity name="Microsoft.Practices.Unity.Configuration" culture="neutral" />
				<codeBase version="1.2.0.0" href="file://D:\Entwicklung\integration\bin\Microsoft.Practices.Unity.Configuration.dll"/>
			</dependentAssembly>
		</assemblyBinding>
	</runtime>
	<configSections>
		<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
	</configSections>
	<unity>
		<containers>
			<container>
				<types>
					<type type="RED.C.Information.IInformation, RED.C.Information" mapTo="RED.Information.Information, RED.Information"/>
				</types>
			</container>
		</containers>
	</unity>
</configuration> 

Nach dem Laden der Config bekomme ich auch Zugriff auf die Section "ms.unity". Allerdings hat diese jetzt nicht den Type "Microsoft.Practices.Unity.Configuration" sondern "System.Configuration.DefaultSection". Somit kann Unity mit der Config nix anfangen. Offensichtlich ist die Struktur der Config-XML so nicht ok.