DLL kann nicht verwendet werden, weil sie mit .NET 2.0 erstellt wurde



  • Hallo Leute,

    ich verwende C# Visual Studio 2010, unter WIN-XP-Prof, SP3, und habe folgendes Problem:

    in meinem Projekt ist eine DLL für Modbus eingebunden. Es ist alles richtig eingebunden; ich kann auf alle Funktionen zugreifen und mein Winform-Programm wird ohne Fehler kompiliert.
    Während der Laufzeit wird allerdings eine Exception ausgelöst, weil die eingebundene DLL für .NET 2.0 erstellt wurde, und habe in meinem Projekt .NET 4.0 eingestellt.

    Weiß jemand wie es möglich ist das Target Framework auf .NET 4.0 beizubehalten und die DLL trotzdem zu nutzen?

    Danke im Voraus



  • Weiß jemand wie es möglich ist das Target Framework auf .NET 4.0 beizubehalten und die DLL trotzdem zu nutzen?

    Hast du Zugang zum Quellcode der .NET 2.0 DLL? Falls ja, könntest du ihr ein COM-Interface verpassen und die DLL dann out-of-process über COM aufrufen. Wenn nicht, kannst du in .NET < 4 einen Wrapper für die DLL schreiben, der eine COM-Schnittstelle hat. Dass das von der Performance her natürlich nicht ganz so toll ist, dürfte klar sein.

    Ansonsten wäre es am einfachsten, das Target Framework auf 3.5 einzustellen, da 2.0, 3.0 und 3.5 zueinander kompatibel sind bzw. aufeinander aufbauen. Du würdest nicht viel verlieren... Funktionen wie String.IsNullOrWhitespace oder Enumerable.ZipWith kannst du leicht nachbauen, genauso wie System.Tuple. Das dynamic-keyword würde dir auch fehlen, aber das musst du wissen, ob du das brauchst. Die ParallelTask-Klassen und PLinq hättest du natürlich auch nicht, das tut schon mehr weh.



  • ok, danke für die ausführliche Antwort. Ich werde dann das Target Framework umstellen.

    Gruß
    sonic



  • Ich habe noch eine Lösung im Internet gefunden.
    Dazu muss man die Projektdatei app.config editieren:

    <?xml version="1.0"?>
    <configuration>
      <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      </startup>
    </configuration>
    

    Keine Ahnung was dort passiert, aber jetzt kann ich das Target Framework auf 4.0 lassen, und die Exception wird nicht mehr ausgelöst.



  • Jo, das kannst du auch verwenden. Beachte aber, dass du die 2.0er Assembly wirklich sehr gut durchtestest, da sie dann auf einer CLR läuft, für die sie nie entwickelt wurde, obwohl MS einen guten Job in Bezug auf Rückwärtskompatibilität macht.
    Außerdem bedingt dieses Attribut auch ein verstecktes out-of-process, aber es dürfte immer noch besser sein als COM out-of-process 😉

    Ach ja: Das hier passiert bei dem Attribut.


Anmelden zum Antworten