C# 如何在.NETCore2.0中包含库
我对.NET还不太了解,所以我想我遗漏了一些明显的东西 我创建了一个库(目标是DLL文件,为.NET标准2.0设置),将其打包为DLL文件和NuGet包。现在我想在ASP.NET Core 2.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
我目前在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应用程序范围之外的更多开发人员。许多人推荐以下两种解决方案之一:
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接受。