Laden...

Versionsprobleme mit eingebundenen DLL's

Erstellt von Kentarion vor 16 Jahren Letzter Beitrag vor 16 Jahren 5.434 Views
K
Kentarion Themenstarter:in
29 Beiträge seit 2006
vor 16 Jahren
Versionsprobleme mit eingebundenen DLL's

Hallo,

ich hab für einen Kunden fremde DLL's eingebunden die ich im Code verwende - diese DLL's verwendet der Kunde um seine Applikation zu erstellen.

Wenn nun diese Fremdfirma ein Versionsupdate macht muß ich jedesmal die neuen DLL's vom Kunden holen um mein Programm für eben diesen wieder lauffähig zu machen.

Dies wäre bei einer großen Versionsänderung ja kein Problem und soll auch so sein.

Nur dies bei jedem kleineren Hotfix zu machen wo sich nur die sub sub sub sub release version um eine kleine Stelle erhöht macht hier Mühen.

Jetzt habe ich erfahren das ich eingebundene DLL's nicht auf eine spezifische Version bilden kann sondern diese etwas flexibel einbinden kann - sozusagen mit Überprüfung ob kompatibel.

Es gibt in Visual Studio bei einer Referenz auch den Punkt 'Spezifische Version'.
Ich hab versucht eine leicht abweichende Version damit zu kompilieren, ohne Erfolg.

Vielleicht weiß einer von euch hier eine elegante Lösung bzw. Hilfestellung zu diesem 'Spezifische Version' Punkt, oder hat ne bessere Idee mit Fremd-DLL's umzugehen.

P
66 Beiträge seit 2006
vor 16 Jahren

Hallo Kentarion,

du kannst in der Konfigurationsdatei der Anwendung eine Versionsumleitung für eingebundene Assemblies angeben.

BEISPIEL AUS MSDN:


<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="myAssembly"
                              publicKeyToken="32ab4ba45e0a69a1"
                              culture="neutral" />
            <bindingRedirect oldVersion="1.0.0.0"
                             newVersion="2.0.0.0"/>
            <codeBase version="2.0.0.0"
                      href="http://www.litwareinc.com/myAssembly.dll"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

Der Eintrag codebase ist nicht so wichtig. In der MSDN findest du genauere Informationen, wie du die Versionsumleitung einrichtest

2.187 Beiträge seit 2005
vor 16 Jahren

Hi,

Das man auf keine bestimmte Minor/Refision/Build-Version binden muss stimmt.
Man muss "nur" auf eine bestimmte Major-Version binden. Das passiert bei privaten Assemblies automatisch (also Assemblies nicht im GAC).

Bei öffenltichen Assemblies muss man (so weit ich weis) den Verweise "umleiten" über App.config/Web.config.

Gruß
Juy Juka

[EDIT]
DA war ich wohl zu langsam.g
[/EDIT]

K
Kentarion Themenstarter:in
29 Beiträge seit 2006
vor 16 Jahren

danke ich werde das mal testen.

K
Kentarion Themenstarter:in
29 Beiträge seit 2006
vor 16 Jahren

Hmm, ich hab mich hier nicht ganz korrekt ausgedrückt, ich erstelle keine Anwendung direkt sondern nur eine Klassenbibliothek die wiederrum von einem anderen Programm verwendet wird.

Das heisst hier gibt es keine App.exe.config richtig?
Oder geht auch Bibliothek.dll.config?

Wichtig ist mir wie gesagt das die nur minimal veränderten dll's die bei mir im Projekt als Referenz eingebunden sind nicht die selbe Version haben als die die dann im Ausführungsverzeichnis liegen.

in meinem Verzeichnis befindet sich also meine Zusatz.dll mit den fremden referenzdll's: verwendetedll1.dll, verwendetedll2.dll, verwendetedll3.dll,...

mein csproj file sieht derzeit so aus:

...

<ItemGroup>
    <Reference Include="verwendetedll1, Version=1.0.2897.15391, Culture=neutral, PublicKeyToken=c88a765aad04fe2f">
      <SpecificVersion>False</SpecificVersion>
    </Reference>
...

ich hab ein dll.config file erstellt das so aussieht:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="verwendetedll1" culture="neutral" publicKeyToken="32ab4ba45e0a69a1"/>
        <bindingRedirect oldVersion="1.0.0.0" newVersion="1.1.0.0"/>
      </dependentAssembly>

    ...

    </assemblyBinding>
  </runtime>
</configuration>

Es lässt sich hübsch kompilieren und ausführen, aber er kann die Versionen nicht der Referenz entsprechend nicht verwenden.

P
66 Beiträge seit 2006
vor 16 Jahren

Dll haben eigentlich selbst keine .config Datei. (Im Forum wurde das auch schon öfters diskutiert. ggf. findest du über die Suche entsprechende Beiträge, wo eine Lösung geboten wird.)

Da du ja selbst nur die DLLs erstellt muss es doch irgendwo eine .exe geben, die deine DLLs benutzt. Dort muss du dann in der .exe.config, die entsprechenden Einträge vornehmen.

K
Kentarion Themenstarter:in
29 Beiträge seit 2006
vor 16 Jahren

Hab eine config an die exe angehängt.

Ein Aufrufziel hat einen Ausnahmefehler verursacht.

leider nicht 😦.

Es muß ja irgendeine Möglichkeit geben die dll's etwas dynamischer laden zu lassen solange die Methoden dahinter existieren die ich aufrufe is ja alles cool 😉