首页 文章

使用多个DLL创建nuget包

提问于
浏览
42

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

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包的最佳实践是什么?是否有专门针对此的教程?我发现的教程都集中在简单的单项目演示上 .

7 回答

  • 1

    您将在单个项目(或nuspec文件)上运行NuGet,但它通过file element支持指向其他项目的指针 . 此元素使用项目引用的名称,因此您可以避免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包 .

  • 1

    您是否生成了一个空白的nuspec文件:

    nuget spec
    

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

    尝试从项目或DLL生成nuspec文件时遇到了一些麻烦 . Also, if you manually reference any files in the nuspec file, the conventions are not used. 这可能是dll或项目生成的nuspec的问题 .

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

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

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

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

  • 38

    看来你的问题和这个问题一样:Why doesn't nuget include the referenced project when packing? . 如果是这样,您可以使用-includereferencedprojects选项(请参阅http://docs.nuget.org/docs/reference/command-line-reference#Pack_Command) .

  • 3

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

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

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

    你可以找到一篇包含walk-through guide heresource code + binary here的文章 .

  • 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:=> cd packages(路径)

    *也许在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中 .

  • 0

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

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

    Project with the required nuspeck file

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

    关于这个包的描述被放置here .

相关问题