使用多个DLL创建nuget包

使用多个DLL创建nuget包,nuget,Nuget,假设我有一个具有这种结构的项目: MyLibrary\ MyLibrary.sln MyLibrary.Core\ MyLibrary.Core.csproj MyLibrary.Extensions\ MyLibrary.Extensions.csproj MyLibrary.Tests\ MyLibrary.Tests.csproj 我想创建一个单独的NuGet包,其中包含MyLibrary.Core.dll和MyLibrary.Extensions

假设我有一个具有这种结构的项目:

MyLibrary\
  MyLibrary.sln
  MyLibrary.Core\
    MyLibrary.Core.csproj
  MyLibrary.Extensions\
    MyLibrary.Extensions.csproj
  MyLibrary.Tests\
    MyLibrary.Tests.csproj
我想创建一个单独的NuGet包,其中包含MyLibrary.Core.dll和MyLibrary.Extensions.dll。我似乎不知道如何让NuGet做这件事。我尝试过手动构建规范文件,也尝试过使用“nuget spec MyLibrary.Core.csproj”构建一个规范文件。我已经尝试将所有DLL添加到一个lib/文件夹中,据我所知,该文件夹是用于将DLL添加到包中的基于约定的机制。在任何情况下,我都可以将MyLibary.Core.dll放入包中,但MyLibrary.Extensions.dll最终不会与它一起打包


TLDR:创建包含多个项目/程序集的NuGet包的最佳实践是什么?有没有专门针对这一点的教程?我发现的教程都集中在简单的单个项目演示上。

您尝试过NuGet Package Explorer吗?可能是最简单的方法:


您是否生成了一个包含以下内容的空nuspec文件:

nuget spec
如果您使用该文件,然后将DLL放在名为lib的文件夹下,它会将它们打包

我在尝试从项目或dll生成nuspec文件时遇到了一些麻烦此外,如果手动引用nuspec文件中的任何文件,则不使用约定。这可能是DLL或项目生成的nuspec的问题

此外,如果您试图从在不同文件夹中执行的生成脚本运行此命令,则可以通过-BasePath命令行告诉nuget您的.\lib文件夹的位置:

build\nuget.exe pack nuget\Company.Project.nuspec -BasePath nuget\

您将在单个项目(或nuspec文件)上运行NuGet,但它支持通过指向其他项目的指针。此元素使用项目引用的名称,因此可以避免a)查找其他项目文件的位置,以及b)作为生成后步骤将文件复制到特定位置

假设您有一个用于MyLibrary.Core.csproj的nuspec文件,并且它引用了MyLibrary.ExtensionsMyLibrary.Tests,以便它们在生成后最终位于bin目录中:

<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    ...
  </metadata>
  <files>
    <file src="bin\Release\MyLibrary.Extensions.dll" target="lib\net40" />
    <file src="bin\Release\MyLibrary.Tests.dll" target="lib\net40" />
  </files>
</package>

...

使用此设置,所有引用都应该在NuGet包中的适当位置结束。您仍然有硬编码的“Release”,但我敢打赌很可能不会分发调试版本的NuGet包。

您的问题似乎与此问题相同:。如果是这样,您可以使用-includereferencedprojects选项(请参阅)。

我最近发布了一个解决方案

“我的解决方案”支持在构建解决方案时自动创建NuGet包,其中每个包可以包含多个程序集、对在同一构建过程中创建的外部NuGet和NuGet的引用,甚至包括用于调试的源代码

在您的情况下,您需要做的就是向解决方案中添加一个新的类库项目,引用要打包的项目,然后添加一个生成后事件

你可以找到一篇带有
还有。

我有一些关于如何使用windows和visual studio的教程:

创建本地文件夹并将其称为包,如:c:/packages//lib-在文件夹中创建另一个文件夹很重要,请将其称为lib并在那里调用dll

打开nuget包资源管理器-

用户界面非常直观,只需添加dll并将其导出到/lib即可(对于俄语教程,请参见图片中的流程,只需单击3次)

它将创建nuspec文件

打开GIT BASH-并导航到:cd c:=>cd包(的路径)

*也许在windows上,您需要为windows的linux内容提供开发人员选项()

在gitbash中输入命令:nuget add-source[选项]

其中::nuspec的全名(include.nuspec)

和:文件夹中文件夹库的路径(c:/packages//lib)

操作成功结束后

在GIT BASH中输入另一个命令:

努吉特背包

此文件夹中没有.nupkg文件


-教程如何将其添加到visual studio。

我遇到了同样的问题,我决定创建Nuget,它将允许从所选项目创建其他Nuget

包已部署在服务器上。在项目中引用它之后,您需要将nuspeck文件添加到应该生成项目的项目中

您应该做的最后一件事是在包管理器中调用命令createnuspec。powershell模块将获取生成的所有库,它还将添加所需的依赖项,并在输出目录中创建nuget


已放置有关此包的说明。

我在向Nuget包添加额外的DLL引用时遇到问题,并在示例项目上测试该包,显然没有添加额外的DLL,无论我如何创建Nuget包

然后我发布了一个消息,当你卸载并再次安装一个具有相同版本号的本地Nuget包时,更改不会生效,额外的DLL不会被添加

因此,每次卸载包时,请关闭visual studio并清除Nuget缓存

然后再次打开Visual Studio并重新安装本地包以使更改生效

或者使包版本每增加一次,以便Visual Studio识别您的更改

例如:

  • 软件包-1.0.0
  • 包-1.0.1
  • 包-1.0.2
要从示例项目创建Nuget包,有一些方法,例如:

  • 右键单击VisualStudio项目并选择“打包”选项
  • 然后安装nuget软件包资源管理器:

    并手动将额外引用(DLL文件)添加到特定目标

  • 使用文档中指定的.nuspec文件创建nuget包:
  • 
    
    在你的
       <files>
            <file src="Plugin.LoggingLibrary\bin\Release\Plugin.LoggingLibrary.dll" target="lib\netstandard1.4\Plugin.LoggingLibrary.dll" />
            <file src="Plugin.LoggingLibrary\bin\Release\Plugin.LoggingLibrary.xml" target="lib\netstandard1.4\Plugin.LoggingLibrary.xml" />
            <file src="Plugin.LoggingLibrary.iOS\bin\Release\iOsDependence.dll" target="lib\Xamarin.iOS10\iOsDependence.dll" />
            <file src="Plugin.LoggingLibrary.Android\bin\Release\AndroidDependence.dll" target="lib\MonoAndroid10\AndroidDependence.dll" />
       </files>