Laden...

DLL von .NET Framwork und NuGet parallel

Erstellt von Palladin007 vor 3 Monaten Letzter Beitrag vor 3 Monaten 327 Views
Palladin007 Themenstarter:in
2.057 Beiträge seit 2012
vor 3 Monaten
DLL von .NET Framwork und NuGet parallel

Guten Mittag,

ich habe ein .NET 4.8.1 Projekt bestehend aus einem Startprojekt ohne SDK-Format und mehreren mit SDK-Format.
Einige Abhängigkeiten sind älter und bauen auf lokalen .NET Framework Referenzen auf und andere suchen auf NuGet.

Dabei ist die System.Threading.Tasks.Extensions.dll ein Problem, denn ein NuGet-Package braucht Version 4.5.4 (von NuGet) und andere Abhängigkeiten brauchen Version 4.2.0.1, sodass er Letzteres nicht findet.

Die konkrete Fehlermeldung:

System.IO.FileNotFoundException: Could not load file or assembly 'System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. Das System kann die angegebene Datei nicht finden.

Ich habe das NuGet-Package mit Version 4.5.4 auch im Startprojekt installiert, dann bekomme ich auch eine Warnung dazu. Diese Warnung ist aber etwas länger, daher lege ich sie als Datei in den Anhang.

Außerdem habe ich ein BindingRedirect erstellt:

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
                <bindingRedirect oldVersion="4.2.0.1" newVersion="4.5.4" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

Das ändert aber leider nichts.

Weiß jemand, wie ich das Problem lösen kann?

Wer [...] kann, ist klar im Vorteil.

lockAlternative fürasync/await: https://github.com/loop8ack/AsyncTicketLock

T
2.183 Beiträge seit 2008
vor 3 Monaten

Kann es sein,das du einfach bei der newVersion noch ein .0 anhängen musst?

Normalerweise sind die vierstellig.

Doku:

https://learn.microsoft.com/en-us/dotnet/framework/configure-apps/redirect-assembly-versions

Nachtrag:

Ich setzte bei mir auch gerne als oldVersion die Range von 0.0.0.0 bis zur spezifischen Version.

Sonst hat man u.U. das Problem, wenn andere Abhängigkeiten wieder mit anderen Versionen reinlaufen, dass es dann wieder Fehler gibt.

Somit werden quasi alle auf die neue Version umgebogen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

Palladin007 Themenstarter:in
2.057 Beiträge seit 2012
vor 3 Monaten

Kann es sein,das du einfach bei der newVersion noch ein .0 anhängen musst?

Ich setzte bei mir auch gerne als oldVersion die Range von 0.0.0.0 bis zur spezifischen Version.

Hab ich beides schon probiert, gleiches Ergebnis.

Wer [...] kann, ist klar im Vorteil.

lockAlternative fürasync/await: https://github.com/loop8ack/AsyncTicketLock

4.772 Beiträge seit 2008
vor 3 Monaten

Hast du schon Assembly Versioning and DLL Hell in C# .NET Framework: Problems and Solutions gefunden?

Probiere mal das AssemblyResolve-Ereignis, um den Fehler abzufangen und die andere DLL zu laden (bzw. einen Verweis darauf zurückzugeben), s.a. Auflösen von Assemblyladevorgängen.

Palladin007 Themenstarter:in
2.057 Beiträge seit 2012
vor 3 Monaten

Beim Versuch, die Assembly selber zu laden, ist mir ein anderes Problem aufgefallen: Die DLL gibt's tatsächlich nicht.

Das ganze ist ein Vsix-Projekt und er legt die DLL zwar ins Output-Verzeichnis, aber nicht in die vsix-Datei, also kann sie natürlich auch nicht gefunden werden.

Fragt sich nur, warum die da nicht liegt, andere NuGet-Packages werden korrekt mit verpackt, nur die nicht - vielleicht weil er denkt, die gibt's schon in .NET und lässt sie deshalb weg?

Ich hab dazu das gefunden:
https://www.cazzulino.com/include-dlls-in-vsix.html

Zumindest bisher scheint das zu funktionieren, ich muss aber noch mehr testen.
Es ist außerdem "nur" die 4.2.0.1 Version, aber scheinbar nutze ich nichts, was Version 4.5.4 braucht.

Wer [...] kann, ist klar im Vorteil.

lockAlternative fürasync/await: https://github.com/loop8ack/AsyncTicketLock

j
641 Beiträge seit 2007
vor 3 Monaten

Vlt ein msbuild issue. Mach doch mal ein issue bei https://github.com/dotnet/msbuild auf.

Beste ist dort wenn du ein beispiel hast, das man es nachstellen kann.

Ich hatte auch schon Fehler in msbuild, nur werden bei mir zu viel files kopiert: https://github.com/dotnet/msbuild/issues/8319

cSharp Projekte : https://github.com/jogibear9988