temuco
Goto Top

Abhängigkeiten in eigenen NuGet-Paketen - eine Abhängigkeit wird nicht eingebunden

Alles unter .NET 7.0

Programmiersprache: C#

Gegeben ist eine eigene Bibliothek isential.crypt.dll, die keine externen Abhängigkeiten enthält. Daraus wurde ein NuGet-Paket erstellt und in einer lokalen Paketquelle gespeichert.

Eine zweite eigene Bibliothek namens isential.MySqloverSsh.dll benutzt drei NuGet-Paketen:

  • isential.crypt
  • MySql.Data
  • SSH.NET

Daraus erstelle ich ein weiteres NuGet-Paket namens isential.MySqloverSsh und speichere es ebenfalls in derselben lokalen Paketquelle ab.

Die isential.MySqloverSsh.csproj sieht so aus:

<Project Sdk="Microsoft.NET.Sdk">  
 <PropertyGroup>
   <TargetFramework>net7.0-windows8.0</TargetFramework>
   <ImplicitUsings>enable</ImplicitUsings>
   <Nullable>enable</Nullable>
   
   <!-- NuGet-Paket-Metadaten -->
   <PackageId>isential.MySqloverSsh</PackageId>
   <Authors>isential gmbh</Authors>
   <Description>Stellt eine MySql-Verbindung über einen SSH-Tunnel her und öffnet diese gleichzeitig.</Description>
   <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
   <PackageProjectUrl>https://isential.de</PackageProjectUrl>
   <RepositoryUrl>https://isential.de</RepositoryUrl>
   <RepositoryType>Privat</RepositoryType>
   <PackageTags>isential MySqloverSsh</PackageTags>
   <AssemblyName>isential.MySqloverSsh</AssemblyName>
   <RootNamespace>isential.MySqloverSsh</RootNamespace>
   <Title>isential.MySqloverSsh</Title>
   <Version>1.0.0</Version>
   <Company>isential gmbh</Company>
   <Product>isential.MySqloverSsh</Product>
   <Copyright>(C) isential gmbh - alle Rechte vorbehalten.</Copyright>
 </PropertyGroup>
 
 <ItemGroup>
   <PackageReference Include="isential.crypt" Version="1.0.0" />  
   <PackageReference Include="MySql.Data" Version="8.1.0" />  
   <PackageReference Include="SSH.NET" Version="2020.0.2" />  
 </ItemGroup>
</Project>

Das NuGet-Paket wird fehlerfrei Erstellt.

Ich binde dieses NuGet-Paket in das Ziel-Projekt ein. Dabei handelt es sich um ein WPF-Projekt unter .NET 7.0.

Der NuGet-Paketmanager zeigt mir auch alles richtig an:

Abhängigkeiten
    net7.0
        MySql.Data (>=8.1.0)
        SSH.NET (>= 2020.0.2)
        isential.crypt (>= 1.0.0)
Wie man sieht, wird auch isential.crypt als Abhängigkeit aufgeführt. Allerdings habe ich nach dem Einbinden in der Projektmappe unter "Pakete" folgendes Bild:

Pakete
    isential MySqloverSsh (1.0.0)
        Kompilietzeitassemblys
        Inhaltsdateien
        Dokumente
        MySql Data (8 1 0)
        SSH NET (2020.0.2)

Wie man sieht, fehlt isential.crypt (1.0.0).

Ich habe versuchshalber die Bibliothek isential.crypt.dlldirekt in isential.MySqloverSsh als DLL bzw. Projektverweis eingebunden und trotzdem steht diese im Zielprojekt nicht zur Verfügung. Klar kann ich isential.crypt.dll in das Zielprojekt manuell einbinden, aber ich möchte das lieber über isential.MySqloverSsh machen, um mich nicht um die Abhängigkeiten kümmern zu müssen – das soll über das Paket isential.MySqloverSsh automatisch gehen.

Warum passiert das und wie kann ich das lösen?

Danke un lG

René

Content-Key: 8158544035

Url: https://administrator.de/contentid/8158544035

Printed on: April 27, 2024 at 13:04 o'clock

Member: temuco
Solution temuco Aug 16, 2023 at 11:43:22 (UTC)
Goto Top
Ich habe gemerkt, dass es einen Unterschied zwischen der Version eines NuGet-Pakets und der Version der darin enthaltenen Assembly gibt. Früher hatte ich die Assemblyversion auf "1.0.*" gesetzt, was bedeutete, dass sie bei jedem Build automatisch erhöht wurde. Das hat zu Verwirrung geführt.

Um das Problem zu beheben, habe ich die Assemblyversion und Dateiversion manuell auf "1.0.0" gesetzt, passend zur Version meines NuGet-Pakets. Das hat das Problem gelöst und jetzt wird meine Bibliothek isential.crypt richtig in meinen Projekten angezeigt.

Dabei habe ich gelernt, dass es in solchen Fällen hilfreich ist, die Versionen von NuGet-Paketen und Assemblies synchron zu halten, besonders wenn man seine eigene Bibliothek erstellt. Es macht die Dinge einfacher und vermeidet Verwirrung.