【问题标题】:Project .dll itself is missing in generated nuget package生成的 nuget 包中缺少项目 .dll 本身
【发布时间】:2019-03-15 13:16:20
【问题描述】:

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

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

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

主项目依赖如下:

【问题讨论】:

标签: c# dll nuget nuget-package


【解决方案1】:

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

当您将 master 打包到 NuGet 包中时,它将创建的默认文件是 bin\Debug\master.1.0.0.nupkg。假设master 是针对.NET Standard 2.0,master 的dll 在nupkg 中保存为lib\netstandard20\master.dll。您需要将此 nupkg 添加/推送到 nuget 提要(可以是计算机或网络上的目录,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 依赖项。我这样做只是为了演示如何轻松使用您自己创建的包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2023-03-26
    • 2016-12-29
    • 2015-11-22
    • 2019-06-25
    相关资源
    最近更新 更多