wake-up-neo.com

So fügen Sie eine Bibliothek in .NET Core 2.0 ein

Ich weiß noch nicht viel über .NET und vermisse etwas Offensichtliches.

Ich habe eine Bibliothek erstellt (als DLL-Datei, festgelegt für .NET Standard 2.0) und diese sowohl als DLL-Datei als auch als Nuget-Paket gepackt. Jetzt möchte ich die Bibliothek in einem anderen Projekt unter ASP.NET Core 2.0 verwenden. Wie soll ich das machen

Ich bin derzeit auf einer Linux-VM und verwende daher VS-Code. Daher würde ich eine Lösung ohne die Verwendung von Visual Studio bevorzugen. Ich habe einige Lösungen mit Visual Studio ausprobiert, aber das hat bei mir nicht funktioniert, da ich den Referenz-Explorer nirgendwo gefunden habe.

12
MrMid

Sie müssten Ihre Bibliothek in der csproj-Datei referenzieren

enter image description here

Eine leere csproj-Datei würde folgendermaßen aussehen:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

</Project>

Jetzt können Sie zwei Arten von Referenzen haben

Projektreferenz - Sie haben ein Projekt, das als Klassenbibliothek in Ihrer Lösung dient, und Sie möchten es direkt referenzieren

<ProjectReference Include="..\..\src\mylib.csproj" />

Paketreferenz - Sie haben einen Link zu einem NuGet-Paket

<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.2" />

In Ihrer csproj-Datei sollten sich die Referenzen in einem "ItemGroup" -Block befinden. Jeder Referenztyp sollte eine eigene "ItemGroup" haben.

Hier ist ein Beispiel einer csproj-Datei mit einigen Paketreferenzen und einigen Projektreferenzen

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.1.0" />
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.1" />
    <PackageReference Include="xunit" Version="2.2.0" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\..\src\mylib.csproj" />
    <ProjectReference Include="..\..\src\mylib2.csproj" />
  </ItemGroup>
</Project>
14
areller

Viele Leute empfehlen eine von zwei Lösungen:

1) Kopieren Sie die Bibliothek in Ihren Lösungsordner.

cp -r foo/foo ./foo
dotnet sln add foo/foo.csproj
cd bar
dotnet add reference ../foo/foo.csproj

Dies ist eine schreckliche Lösung.

Tun Sie dies nicht (dh kopieren Sie Ihren Bibliothekscode und fügen Sie ihn jedes Mal ein, wenn Sie ihn verwenden möchten, was aus offensichtlichen Gründen schlecht ist).

2) Richten Sie ein lokales Nuget-Repository ein, kopieren Sie Ihre Bibliothek in das lokale Repository und fügen Sie es hinzu.

nuget add -name "Local" -source /home/doug/packages
nuget add ~/foo/foo.nupkg -source /home/doug/packages

Dann installieren Sie das Paket:

cd bar
dotnet add package foo

Dies ist eine akzeptable Lösung, aber der Workflow ist ziemlich irritierend, wenn Sie aktiv an Ihrer Bibliothek (foo) arbeiten, da der Pfad -source absolut sein muss.

-

Ich empfehle, dass Sie sich dotnet add package with local package file ansehen, was erklärt, wie Sie einen lokalen Cache für alle benutzerdefinierten nupkg-Dateien haben können, mit denen Sie arbeiten möchten.

Im Grunde genommen legen Sie dies einfach in Ihrem Lösungsordner ab:

NuGet.Config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <packageSources>
    <add key="local" value="./packages" />
 </packageSources>
</configuration>

(Beachten Sie, dass ./packages ein relativ Pfad ist, der auch dann funktioniert, wenn Sie Ihr Projekt auf einem völlig anderen Computer oder Betriebssystem auschecken.)

Wenn Sie nun dotnet add package X Aufrufen, wird auch nach einer Datei mit dem Namen x.nupkg in Ihrem Ordner ./packages/ Gesucht.

Wenn Sie jetzt eine benutzerdefinierte lokale Bibliothek verwenden möchten, müssen Sie lediglich Folgendes tun:

cp ~/foo/foo.nupkg ./packages
cd bar
dotnet add package foo

<3

(Hinweis: Standardmäßig speichert nuget Ihre .nupkg-Dateien in ~/.nuget zwischen und stellt Pakete aus diesem Ordner wieder her, wenn Sie dotnet add package X, auch wenn verwenden. nupkg in deinem lokalen ./packages Ordner. Sie können den Befehl dotnet nuget locals all --clear Nützlich finden, wenn Sie auf seltsames Verhalten stoßen, um sicherzustellen, dass Sie die genaue Version des gewünschten nupkg erhalten, nicht irgendeine beliebige zwischengespeicherte Version.

13
Doug

Angesichts der Tatsache, dass das DLL, auf das Sie im neuen ASP.NET Core 2.0-Projekt verweisen möchten, relativ neu ist, müssen Sie bei der Entwicklung des ASP vermutlich Änderungen an diesem ursprünglichen DLL vornehmen. Netzprojekt.

In dieser Situation würde ich das ursprüngliche Projekt DLL als Teil der ASP.Net-Lösung hinzufügen, damit Sie an beiden Sätzen von Quellcode arbeiten können, einschließlich des Festlegens von Haltepunkten innerhalb desselben Lösungsarbeitsbereichs.

Das NUGET-Packen des ursprünglichen DLL Projekts kann verzögert werden, bis sich die erste Version Ihrer gesamten kombinierten Lösung stabilisiert hat und Sie das DLL einer größeren Entwicklergruppe zur Verfügung stellen möchten, die über den Rahmen von hinausgeht Ihre ASP.NET-Anwendung.

1
camelCase

Eine andere Möglichkeit, auf das lokale Paket in der .csproj-Datei zu verweisen:

<ItemGroup>

 <Reference Include="MyAssembly">

   <HintPath>path\to\MyAssembly.dll</HintPath>

 </Reference>
</ItemGroup>
1
simon w

Eine gute Lösung besteht darin, die Bibliothek (DLL-Datei), die Sie verwenden möchten, zu den Projektreferenzen Ihres Projekts hinzuzufügen, in dem Sie die Bibliothek verwenden möchten:

Klicken Sie mit der rechten Maustaste auf das Projekt -> Hinzufügen -> Referenz -> Projekt -> Durchsuchen -> Pfad_zu_der_generierten_Bibliothek (.dll)

Dadurch wird automatisch der folgende Knoten in der .csproj-Datei generiert:

<ItemGroup>
   <Reference Include="DotNetCoreClassLibraryCodeParser">
      <HintPath>..\..\DotNetCoreClassLibrary\DotNetCoreClassLibrary\bin\Debug\netcoreapp2.1\DotNetCoreClassLibrary.dll</HintPath>
   </Reference>
 </ItemGroup>

Ich hoffe es hilft.

0
cristian