从DLL文件创建NuGet包

101

我想创建一个 NuGet 包,将多个 .dll 文件作为引用添加到我的项目中。

我有一个包含 10 个 .dll 文件的文件夹。

当我通过 NuGet 安装这个包时,我希望这些文件被添加到项目的引用中。


没有自动化这件事的魔法工具,你必须学习 .nuspec 并以那种方式打包组件。 - Lex Li
2
@LexLi 错了。请看被接受的答案。 - Neo
@Neo,“NuGet Package Explorer”和“nuget spec/pack”都隐式地使用.nuspec。我想知道你的评论是从哪里来的。 - Lex Li
4
NuGet Package Explorer是一款“神奇的工具”,它自动化了创建包含DLL文件的NuGet包并发布到NuGet的过程。您只需指定要包含哪些DLL文件、任何元数据以及发布的URL/密钥即可。这正是原帖作者想要的。我今天刚使用它完成了操作,甚至不需要查看.nuspec文件,现在其他项目已经引用了我的包并包含所需的DLL文件。因此,我不需要像你建议的那样“学习.nuspec”。 - Neo
这是我解决同样问题时所用的资源:https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#advanced-extension-points-to-create-customized-package - Rupinder Kaur
3个回答

123

我想创建一个NuGet包,将多个.dll添加为我的项目的引用。

我将给出两种实现���法:

第一种方法,使用 NuGet Package Explorer

  1. 下载NuGet Package Explorer
  2. 打开NuGet Package Explorer,选择创建一个新的包。
  3. 在内容选项卡上添加一个lib文件夹,并添加您的dll文件。
  4. 保存该包并安装到项目中,检查是否已添加引用。

NuGet Package Explorer GUI

第二种方法,就像Lex Li所提到的那样,我们可以使用.nuspec打包程序集

  1. 下载nuget.exe
  2. 创建一个新项目。
  3. 打开CMD并切换路径至nuget.exe。
  4. 使用命令行:nuget spec "PathOfProject\TestDemo.csproj"
  5. 打开TestDemo.csproj.nuspec文件并对其进行修改,并将程序集添加为文件;以下是我的.nuspec文件:
<?xml version="1.0"?>
<package>
  <metadata>
    <id>TestDemo</id>
    <version>1.0.0</version>
    <authors>Tester</authors>
    <owners>Tester</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>TestDemo</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2017</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>
  <files>
    <file src="MultipleDll\*.*" target="lib\net461" />
  </files>
</package>
  • 使用 pack 命令:nuget pack TestDemo.csproj.nuspec

  • 用 NuGet 包浏览器打开 TestDemo 包。

  • NuGet Package Explorer - built package output


    4
    我正在尝试制作我的第一个NuGet包,并从您那里了解到了NuGet Package Explorer。非常容易。有一个问题:我是否需要将DLL放在lib文件夹的“native”子文件夹中?(您的第二个截图建议这样做)screenshot - Mike
    @Mike 如果这个示例中的ClassLibrary有依赖关系,例如依赖于4.6.1,您需要添加lib并将它们的dll添加到lib中。否则,在安装包时会出现依赖项问题。 - Dynamic_Pace
    我建议您完成NuGet CLI参考页面上提到的安装步骤,以便在您的环境中高效地使用nuget.exe。基本上是将包含nuget.exe的文件夹路径添加到Path环境变量中,以便可以从系统的任何位置使用它。 - Alexis Leclerc

    45

    我认为创建NuGet包最好的方法是使用nuget.exe

    1. 首先,下载并安装nuget.exe (https://www.nuget.org/downloads)
    2. 然后进入您的项目文件夹,按Shift+右键显示命令提示符
    3. 在命令提示符中,输入

      nuget spec
      
    4. 现在你将拥有一个.nuspec文件。在编辑器中打开它并添加Id、作者等信息。

    5. 最重要的部分是在封闭的元数据标签后面的files标签。

      你可以像这样在此定义所有dll:

    6. <files>
         <file src="bin\Release\YourDll.dll" target="lib"></file>
      </files>
      
      最后,您可以使用以下命令创建.nupkg文件:
      nuget pack 'Your_nuspec_file_name'
      

      这个关于如何创建Nuget包的视频有一个非常有用且清晰的教程。


    10

    如果你想通过 Visual Studio 或 dotnet 完成,那么你可以编辑 csproj 文件并添加一个 ItemGroup 来包含以下的 dlls: 这将使其它的 dlls 和当前项目的 dll 一起打包在 Nuget 包中。

    <ItemGroup>
        <Content Include="<path to other dll>">
            <Pack>true</Pack>
            <PackagePath>lib\$(TargetFramework)</PackagePath>
        </Content>
    </ItemGroup>
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接