使用多个DLL创建nuget包

时间:2011-09-20 14:16:24

标签: nuget

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

MyLibrary\
  MyLibrary.sln
  MyLibrary.Core\
    MyLibrary.Core.csproj
  MyLibrary.Extensions\
    MyLibrary.Extensions.csproj
  MyLibrary.Tests\
    MyLibrary.Tests.csproj

我想创建一个包含MyLibrary.Core.dll和MyLibrary.Extensions.dll的NuGet包。我似乎无法弄清楚如何让NuGet这样做。我已经尝试手动构建spec文件,我尝试使用“nuget spec MyLibrary.Core.csproj”构建一个。我已经尝试将所有DLL添加到lib /文件夹中,我理解这是基于约定的机制,用于将DLL添加到包中。在每种情况下,我都可以将MyLibary.Core.dll放入包中,但MyLibrary.Extensions.dll最终不会与它一起打包。

TLDR:使用多个项目/程序集创建NuGet包的最佳做法是什么?是否有专门针对此的教程?我发现的教程都集中在简单的单项目演示上。

8 个答案:

答案 0 :(得分:40)

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

假设您有 MyLibrary.Core.csproj 的nuspec文件,并且它引用 MyLibrary.Extensions MyLibrary.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包。

答案 1 :(得分:21)

您是否使用以下命令生成空白nuspec文件:

nuget spec

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

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

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

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

答案 2 :(得分:3)

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

http://nuget.codeplex.com/releases/view/59864

答案 3 :(得分:1)

您的问题似乎与此问题相同:Why doesn't nuget include the referenced project when packing?。如果是这样,您可以使用-includereferencedprojects选项(参见http://docs.nuget.org/docs/reference/command-line-reference#Pack_Command)。

答案 4 :(得分:1)

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

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

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

你可以找到一篇walk-through guide here的文章  和source code + binary here

答案 5 :(得分:1)

我有一些教程,我是如何用windows和visual studio完成的:

创建本地文件夹并将其命名为:c:/ packages // lib - 重要的是在文件夹中创建另一个文件夹,将其称为lib并通过那里dll。

open nuget package explorer - https://npe.codeplex.com/downloads/get/clickOnce/NuGetPackageExplorer.application

ui非常直观,只需添加dll并将其导出到/ lib(对于教程https://blog.zwezdin.com/2014/building-nuget-packages-with-gui-tool/它是俄语但是在图片上看到流量大约是3次点击)

它将创建nuspec文件

打开GIT BASH - https://git-for-windows.github.io/并导航至:cd c:=&gt; cd包(路径)

*也许在windows上你需要为windows的linux东西提供开发者选项(https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/

在GIT BASH中输入命令:nuget add -source [options]

其中:: nuspec的全名(包括.nuspec)

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

行动结束后

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

nuget pack .nuspec

此文件夹中没有.nupkg文件。

How to install a Nuget Package .nupkg file locally? - 教程如何将其添加到visual studio。

答案 6 :(得分:0)

我有同样的问题,我决定创建Nuget,这将允许从所选项目创建其他nugets。

包已部署在Nuget.org site上。在项目中引用它之后您需要将nuspeck文件添加到应该生成项目的项目中。

Project with the required nuspeck file

您应该完成的最后一件事是在程序包管理器中调用命令Create-Nuspec。比powershell模块将获取构建结果的所有库,它还将添加所需的依赖项并在输出目录中创建nuget。

有关此软件包的说明已放置here

答案 7 :(得分:0)

在向Nuget程序包添加额外的dll引用,并在示例项目中测试该程序包时,无论我创建Nuget程序包的方式如何,显然都没有添加额外的dll。

然后,我发布了一个信息,当您再次卸载并安装具有相同版本号的本地Nuget软件包时,更改不会生效,因此不会添加额外的dll。

因此,每次卸载软件包时,请关闭Visual Studio并清除Nuget缓存,

How to clear NuGet package cache using command line?

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

或者使软件包版本每次增加,以使Visual Studio能够识别您的更改。

例如:

  • Package-1.0.0
  • Package-1.0.1
  • Package-1.0.2
  • .....

要从示例项目中创建Nuget包,可以采用以下几种方法,例如:

  1. 右键单击您的Visual Studio项目,然后选择“打包”选项

enter image description here

然后安装nuget软件包浏览器:

https://www.microsoft.com/es-ec/p/nuget-package-explorer/9wzdncrdmdm3?activetab=pivot:overviewtab

enter image description here

并手动将额外的引用(dll文件)添加到您的特定目标。

  1. 使用.nuspec文件创建文档中指定的nuget包:

https://docs.microsoft.com/en-us/nuget/guides/create-packages-for-xamarin

   <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>

在文件部分中添加您的.dll文件。

别忘了,每次您从本地源卸载并重新安装nuget软件包时。

  • 或者您每次都增加软件包的版本:

enter image description here

  • 或关闭Visual Studio,清理nuget缓存并重建项目。

为了使更改生效。