如何在.NET Core 2.0中包含库

时间:2017-08-20 09:29:34

标签: c# .net .net-core asp.net-core-2.0 .net-core-2.0

我还不太了解.NET,所以我很遗憾我错过了一些明显的东西。

我创建了一个库(目标为dll,为.NET标准2.0设置),将其打包为dll和nuget包。现在我想在ASP.NET Core 2.0上的另一个项目中使用该库。我该怎么办?

我目前在Linux VM上,所以我使用VS Code,因此我更喜欢不使用完整Visual Studio的解决方案。我使用完整的Visual Studio尝试了一些解决方案,但这对我没有用,因为我还没有找到参考资源管理器。

5 个答案:

答案 0 :(得分:13)

您必须在csproj文件中引用您的库

enter image description here

空的csproj文件如下所示:

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

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

</Project>

现在,您可以有两种类型的参考

项目参考 - 您的解决方案中有一个项目作为类库,您想直接引用它

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

套餐参考 - 您有一个指向NuGet套餐的链接

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

在csproj文件中,引用应位于&#34; ItemGroup&#34;阻止,每个引用类型应该拥有它自己的&#34; ItemGroup&#34;

这是一个包含一些包引用和一些项目引用的csproj文件的示例

<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>

答案 1 :(得分:13)

很多人推荐两种解决方案中的一种:

1)将库复制到解决方案文件夹中。

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

这是一个糟糕的解决方案。

不要这样做(即每次要使用它时复制并粘贴你的库代码,由于显而易见的原因而不好)。

2)设置本地nuget存储库,将库复制到本地存储库,然后添加它。

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

然后安装包:

cd bar
dotnet add package foo

这是一个可接受的解决方案,但如果您正在积极处理您的库(foo),则工作流程非常烦人,因为-source路径必须绝对

-

我建议您查看dotnet add package with local package file,它解释了如何使用您想要使用的任何自定义nupkg文件的本地缓存。

基本上,只需将其放入解决方案文件夹:

NuGet.Config

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

(请注意./packages是相对路径,即使您在完全不同的机器或操作系统上检查项目,它也能正常工作)

现在,如果您致电dotnet add package X,它还会在您的./packages/文件夹中查找名为x.nupkg的文件。

现在,如果您想使用任何自定义本地库,您只需要:

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

&LT; 3

(注意:默认情况下,nuget将你的.nupkg文件缓存在〜/ .nuget中,如果你调用dotnet add package X,即使你有不同的X,也会从该文件夹恢复包。你当地的./packages文件夹中的nupkg。你可能会发现命令dotnet nuget locals all --clear很有用,如果你遇到奇怪的行为,以确保你得到你想要的nupkg的确切版本,而不是一些任意的缓存版本)

答案 2 :(得分:1)

鉴于您要在新的ASP.NET Core 2.0项目中引用的DLL相对较新,我怀疑您在开发ASP.Net项目时需要对此原始DLL进行更改。

在这种情况下,我会将原始DLL项目添加为ASP.Net解决方案的一部分,以便您可以处理两组源代码,包括在同一解决方案工作区内设置断点。

原始DLL项目的NUGET打包可能会延迟,直到整个组合解决方案的第一个版本稳定下来,并且您希望将该DLL提供给超出ASP.NET应用程序范围的更大的开发人员。

答案 3 :(得分:0)

在.csproj文件中引用本地包的另一种方法:

QStyledItemDelegate::paint()

答案 4 :(得分:0)

一个不错的解决方案是将要使用的库(.dll文件)添加到要使用该库的项目的“项目引用”中:

右键单击项目->添加->参考->项目->浏览-> Path_to_your_generation_library(.dll)

这将在.csproj文件中自动生成以下节点:

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

希望有帮助。