Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.NETCore2.0中包含库_C#_.net_.net Core_Asp.net Core 2.0_.net Core 2.0 - Fatal编程技术网

C# 如何在.NETCore2.0中包含库

C# 如何在.NETCore2.0中包含库,c#,.net,.net-core,asp.net-core-2.0,.net-core-2.0,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虚拟机上,所以我使用Visual Studio代码,因此我更喜欢一些不使用完整Visual Studio的解决方案。我尝试了一些使用完整Visual Studio的解决方案,但对我来说不起作用,因为我在任何地方都没有找到引用资源管理器。您必须在.c

我对.NET还不太了解,所以我想我遗漏了一些明显的东西

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


我目前在Linux虚拟机上,所以我使用Visual Studio代码,因此我更喜欢一些不使用完整Visual Studio的解决方案。我尝试了一些使用完整Visual Studio的解决方案,但对我来说不起作用,因为我在任何地方都没有找到引用资源管理器。

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

<ItemGroup>

 <Reference Include="MyAssembly">

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

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

空的.csproj文件如下所示:

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

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

</Project>

Exe
netcoreapp1.1
现在,您可以有两种类型的引用:

<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>
项目引用-您的解决方案中有一个用作类库的项目,并且您希望直接引用它

<ProjectReference Include="..\..\src\mylib.csproj" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.2" />

软件包参考-您有一个指向NuGet软件包的链接

<ProjectReference Include="..\..\src\mylib.csproj" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.2" />

在.csproj文件中,引用应该位于“ItemGroup”块中,并且每个引用类型都应该有自己的“ItemGroup”

下面是一个.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>

netcoreapp1.1

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

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


原始DLL项目的NuGet打包可能会延迟,直到整个组合解决方案的第一个版本稳定下来,并且您希望将该DLL文件提供给ASP.NET应用程序范围之外的更多开发人员。许多人推荐以下两种解决方案之一:

  • 将库复制到解决方案文件夹中

    cp-r foo/foo/foo dotnet sln添加foo/foo.csproj 光碟 dotnet添加参考../foo/foo.csproj

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

    不要这样做(也就是说,每次你想使用你的库代码时,都要复制并粘贴它。这是不好的,原因很明显)

  • 设置本地NuGet存储库,将库复制到本地存储库中,然后添加它

    nuget添加-名称“本地”-源/主/道格/包 nuget add~/foo/foo.nupkg-source/home/doug/packages

  • 然后安装软件包:

    cd bar
    dotnet add package foo
    
    这是一个可以接受的解决方案,但如果您正在积极处理库(foo),那么工作流会非常恼人,因为
    -source
    路径必须是绝对路径

    --

    我建议您看一看,它解释了如何对任何要使用的自定义.nupkg文件进行本地缓存

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

    文件NuGet.Config


    (注意:默认情况下,NuGet会将.nupkg文件缓存在~/.NuGet中,如果您调用
    dotnet add package X
    ,即使您的本地/packages文件夹中有不同的X.nupkg,也会从该文件夹还原包。如果遇到奇怪的行为,您可能会发现命令
    dotnet NuGet locals all--clear
    很有用,以确保您的安全。)获取所需的.nupkg文件的确切版本,而不是任意缓存版本)

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

    <ItemGroup>
    
     <Reference Include="MyAssembly">
    
       <HintPath>path\to\MyAssembly.dll</HintPath>
    
     </Reference>
    </ItemGroup>
    
    <ItemGroup>
       <Reference Include="DotNetCoreClassLibraryCodeParser">
          <HintPath>..\..\DotNetCoreClassLibrary\DotNetCoreClassLibrary\bin\Debug\netcoreapp2.1\DotNetCoreClassLibrary.dll</HintPath>
       </Reference>
     </ItemGroup>
    
    
    路径\to\MyAssembly.dll
    
    一个好的解决方案是将要使用的库(.dll文件)添加到要使用库的项目的项目引用中:

    右键单击项目→ 添加→ 参考文献→ 项目→ 浏览→ 指向生成的库(.dll)的路径

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

    <ItemGroup>
    
     <Reference Include="MyAssembly">
    
       <HintPath>path\to\MyAssembly.dll</HintPath>
    
     </Reference>
    </ItemGroup>
    
    <ItemGroup>
       <Reference Include="DotNetCoreClassLibraryCodeParser">
          <HintPath>..\..\DotNetCoreClassLibrary\DotNetCoreClassLibrary\bin\Debug\netcoreapp2.1\DotNetCoreClassLibrary.dll</HintPath>
       </Reference>
     </ItemGroup>
    
    
    ..\..\DotNetCoreClassLibrary\DotNetCoreClassLibrary\bin\Debug\netcoreapp2.1\DotNetCoreClassLibrary.dll
    
    谢谢!这似乎是一个不错的选择。我会尝试一下,我会找到如何使用相对路径。是的,这可能节省了我很多时间。那个库确实还是有问题的。谢谢!这应该被anwser接受。