Hallo,
nach einer Änderung in einer DLL (Delphi 2005 mit NET-FCL) klappt die Verknüpfung zwischen EXE und DLL nicht mehr, gleichgültig ob ich die DLL im GAC installiere oder lokal im Verzeichnis \Bin aufrufe.
<b>Exception.Message</b> lautet:
<i>"Datei- oder Assemblyname 'VS_Klassen' oder eine Abhängigkeit davon wurde nicht gefunden."</i>
Als <b>Details der Exception</b> werden gemeldet:
"=== Pre-bind state information ===
LOG: DisplayName = VS_Klassen, Version=5.0.2320.19655, Culture=de-DE, PublicKeyToken=a81d510c00000000 (Fully-specified)
LOG: Appbase = F:\VS_NET\bin\
LOG: Initial PrivatePath = NULL
Calling assembly : VS_Polis, Version=5.0.2320.19660, Culture=de-DE, PublicKeyToken=1b720cbd2c7186f9.
===
LOG: Private path hint found in configuration file: Bin.
LOG: Publisher policy file is not found.
LOG: Host configuration file not found.
LOG: Using machine configuration file f
<b>VS_Polis.exe.config</b> enthält folgende Angaben:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<publisherPolicy apply="yes" />
<probing privatePath="Bin" />
<dependentAssembly>
<assemblyIdentity name="VS_Klassen"
publicKeyToken="1b720cbd2c7186f9"
culture="de-DE" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Grundsätzlich ist mir bewusst, dass beim Aufruf der DLL alle Angaben - Version, Culture, Key - übereinstimmen müssen. Aber auch wenn ich in der config-Datei unter assemblyIdentity die Angaben ändere, bleibt das Problem bestehen.
Deshalb habe ich - neben dem Hauptproblem, was eigentlich passiert ist und wie ich dies regeln kann - folgende zusätzliche Fragen:
** Ist beim Vergleich der Versionsnummer auch der letzte Bestandteil relevant? Muss ggf. die DLL nach jedem Rebuild neu in den GAC kopiert werden?
** Ist es deshalb beim Entwickler sinnvoller, auf den GAC für eigene Entwicklungen zu verzichten?
** Delphi bietet an, die Versionsnummer verkürzt "5.0.*" vorzugeben. Ist dies etwa ungünstig?
** Wieso zeigt die Fehlermeldung für die DLL einen anderen PublicKeyToken an als der Explorer? Für DLL und EXE habe ich die gleiche Schlüsseldatei .snk verwendet. Also müssten die Schlüssel doch gleich sein?
** Sucht NET bei dieser config-Datei vorrangig im GAC oder in \Bin?
** Worauf bezieht sich die Fehlermeldung "Publisher policy file"? Ist dabei der entsprechende Abschnitt der config-Datei gemeint oder was sonst?
** Welche config-Datei ist bei "Host configuration file" gemeint?
** Bei eigenen Entwicklungen kann ich natürlich auf den GAC verzichten. Ist dieser (also auch der <i>strong name</i>) aber nicht Voraussetzung für Registrierung als Managed Code?
Leider haben mir die NET-Hilfe, Kosch's Crashkurs, das Forum und viele Versuche nicht geholfen. Wie komme ich weiter? Danke!
Jürgen
nach einer Änderung in einer DLL (Delphi 2005 mit NET-FCL) klappt die Verknüpfung zwischen EXE und DLL nicht mehr, gleichgültig ob ich die DLL im GAC installiere oder lokal im Verzeichnis \Bin aufrufe.
<b>Exception.Message</b> lautet:
<i>"Datei- oder Assemblyname 'VS_Klassen' oder eine Abhängigkeit davon wurde nicht gefunden."</i>
Als <b>Details der Exception</b> werden gemeldet:
"=== Pre-bind state information ===
LOG: DisplayName = VS_Klassen, Version=5.0.2320.19655, Culture=de-DE, PublicKeyToken=a81d510c00000000 (Fully-specified)
LOG: Appbase = F:\VS_NET\bin\
LOG: Initial PrivatePath = NULL
Calling assembly : VS_Polis, Version=5.0.2320.19660, Culture=de-DE, PublicKeyToken=1b720cbd2c7186f9.
===
LOG: Private path hint found in configuration file: Bin.
LOG: Publisher policy file is not found.
LOG: Host configuration file not found.
LOG: Using machine configuration file f
<b>VS_Polis.exe.config</b> enthält folgende Angaben:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<publisherPolicy apply="yes" />
<probing privatePath="Bin" />
<dependentAssembly>
<assemblyIdentity name="VS_Klassen"
publicKeyToken="1b720cbd2c7186f9"
culture="de-DE" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Grundsätzlich ist mir bewusst, dass beim Aufruf der DLL alle Angaben - Version, Culture, Key - übereinstimmen müssen. Aber auch wenn ich in der config-Datei unter assemblyIdentity die Angaben ändere, bleibt das Problem bestehen.
Deshalb habe ich - neben dem Hauptproblem, was eigentlich passiert ist und wie ich dies regeln kann - folgende zusätzliche Fragen:
** Ist beim Vergleich der Versionsnummer auch der letzte Bestandteil relevant? Muss ggf. die DLL nach jedem Rebuild neu in den GAC kopiert werden?
** Ist es deshalb beim Entwickler sinnvoller, auf den GAC für eigene Entwicklungen zu verzichten?
** Delphi bietet an, die Versionsnummer verkürzt "5.0.*" vorzugeben. Ist dies etwa ungünstig?
** Wieso zeigt die Fehlermeldung für die DLL einen anderen PublicKeyToken an als der Explorer? Für DLL und EXE habe ich die gleiche Schlüsseldatei .snk verwendet. Also müssten die Schlüssel doch gleich sein?
** Sucht NET bei dieser config-Datei vorrangig im GAC oder in \Bin?
** Worauf bezieht sich die Fehlermeldung "Publisher policy file"? Ist dabei der entsprechende Abschnitt der config-Datei gemeint oder was sonst?
** Welche config-Datei ist bei "Host configuration file" gemeint?
** Bei eigenen Entwicklungen kann ich natürlich auf den GAC verzichten. Ist dieser (also auch der <i>strong name</i>) aber nicht Voraussetzung für Registrierung als Managed Code?
Leider haben mir die NET-Hilfe, Kosch's Crashkurs, das Forum und viele Versuche nicht geholfen. Wie komme ich weiter? Danke!
Jürgen
Comment