项目.dll本身在生成的nuget包中缺失

问题描述 投票:0回答:1

我正在使用c#.net核心项目。项目名称为Master,它具有外部NuGet包的依赖项“SpecFlow.CustomPlugin”。主项目有两个类,如Shape.cs和Factory.cs。

当我生成Master项目的NuGet包时,Shape.cs和Factory.cs类的实现可以作为库用于其他项目。在生成Master项目的NuGet包后,我只看到“SpecFlow.CustomPlugin”内容及其自己的相关dll文件,但我无法在新生成的NuGet包中看到dll的Master项目。

新生成的NuGet包包含在另一个项目中,比如说Consumer。消费者希望使用Shape.cs方法和Factory.cs方法,但它无法访问。

主项目依赖关系看起来像:enter image description here

c# dll nuget nuget-package
1个回答
0
投票

首先,确保ShapeFactory是公开的。如果您未指定其可见性,则默认情况下它们是私有的,这意味着它们不能被其他项目直接使用,无论是作为包引用还是项目引用。

当您将master打包到NuGet包中时,它将创建的默认文件是bin\Debug\master.1.0.0.nupkg。假设master的目标是.NET Standard 2.0,则master的dll在lib\netstandard20\master.dll中保存为nupkg。你需要将这个nupkg添加/推送到nuget feed(可以是你的计算机或网络上的目录,nuget.org或者你可以host your own feed)。您的comsumer项目需要一个nuget.config,它将正确的NuGet提要添加为源,然后您将包引用添加到主包。在还原之后(如果使用UI添加了包,Visual Studio会自动执行),那么您可以使用任何master的公共类。

这里的命令可以在命令行上运行以设置两个项目,一个是包,另一个是使用它。如果您在Visual Studio中使用.NET Core,它必须已经下载了.NET Core SDK,它将dotnet cli放在您的路径上。您还需要从https://www.nuget.org/downloads/下载nuget.exe。

dotnet new nugetconfig
nuget source -configfile nuget.config add -name local -source feed

# create an isolated nuget environment, because I don't like to populate
# my global packages folder with test packages
nuget config -configfile nuget.config -set globalPackagesFolder=gpf

# create a library, pack it, and add the nupkg to our local feed
dotnet new classlib -n MyLib
dotnet pack MyLib\MyLib.csproj -o nupkgs\
nuget add MyLib\bin\Debug\MyLib.1.0.0.nupkg -s local

# create console app and reference MyLib
dotnet new console -n MyApp
dotnet add MyApp\MyApp.csproj package MyLib --version 1.0.0

#if you want to open these projects in Visual Studio
dotnet new sln -n sample
dotnet sln add MyLib\MyLib.csproj
dotnet sln add MyApp\MyApp.csproj
start sample.sln

通常,您不会使用NuGet包在同一解决方案中使用另一个项目中的一个项目。只需将它们作为项目引用,当您将项目打包到NuGet包中时,项目引用将成为NuGet依赖项。我这样做只是为了演示如何轻松使用自己创建的包。

© www.soinside.com 2019 - 2024. All rights reserved.