57

我将在这里提出几个问题......首先,使用 NuGet 是否可以从几个 DLL 创建一个包?没有 Visual Studio 项目,只有命令行和几个预编译的 DLL 文件。

其次,假设这是可能的,为什么我不断收到“在 lib 文件夹之外的程序集”警告?我已经尝试了所有我能想到的方法来获取关联的程序集,以将它们自己添加为 NuGet 包中的引用。

我的文件结构看起来像这样

 Root
   - File1.dll
   - lib
     - File2.dll
     - File3.dll

当我告诉 NuGet 使用这样的 .nuspec 打包它时

<?xml version="1.0"?>
<package >
  <metadata>
    <id>File1.dll</id>
    <version>1.0.0</version>
    <authors>thisguy</authors>
    <owners>thisguysmom</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>This is some library</description>
    <releaseNotes>Porting to NuGet</releaseNotes>
    <copyright>Copyright 2012</copyright>
    <references>
      <reference file="File2.dll" />      
      <reference file="File3.dll" />
    </references>
  </metadata>
</package>

我收到了那个警告。从我正在阅读的内容来看,我什至不必在我的任何项目中定义引用节点,因为 lib 文件夹项应该自动添加为引用?

有没有人了解这个 NuGet 混乱?

4

8 回答 8

20

我刚刚遇到了这个问题。Nuget 期望的结构如下所示:

root
  - lib
    - net40
      - File1.dll
      - File2.dll
      - File3.dll

net40 或 net20 或 net45 适合您的 .net 版本。

nuget pack yourlibrary.nuspec

把它打包。

这将打包目录批发并将其放入 nupkg。错误消息将在此时消失。

于 2015-01-14T18:51:44.540 回答
18

您要引用的任何 dll 都应位于 lib 文件夹下。该警告是因为 file1.dll 在 lib 之外,并且在安装包期间将被忽略。(其他特殊文件夹是“内容”和“工具”)

我用过这个结构:

Root
  - lib
    - File1.dll
    - File2.dll
    - File3.dll

有关其他详细信息,请参阅:http ://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Package_Conventions 。

于 2012-08-07T23:52:11.490 回答
15

使用截至本文时最新的 NuGet 版本(我假设也有更高版本),您可以使用 .csproj 文件与 .nuspec 文件一起创建包。我们所做的是制作一个 .nuspec 文件(使用 nuget 规范然后对其进行自定义)并将其包含在项目中。

使用自定义的 .nuspec 文件,我们使用以下命令:

nuget pack sample.csproj -IncludeReferencedProjects

那时它构建了 .nupkg 并且没有发出问题。.nu​​pkg 文件显示在正常的输出文件夹中(在我的默认情况下,bin\debug)。

于 2015-05-19T19:38:24.267 回答
12

您可以通过在 nuspec 文件中添加下面的内部标记来添加对另一个 dll 的引用

<package>
   <metadata>
      ...
</metadata>
<files>
 <file src="..\ReferencedFolder\*.*" target="lib\net40\" />
</files>
</package>
于 2014-11-05T05:54:01.540 回答
1

Alexandre 指的是创建 NuGet 包时创建的“lib”文件夹。您可以像打开任何 zip 文件一样打开 .nupkg。在那里,您将看到一个 lib\netXX 文件夹,其中 XX 是您所针对的 .NET 框架的版本。因此,当您打包 NuGet 文件时,请确保 File1.dll 位于 lib 文件夹中。

于 2013-10-14T19:11:37.473 回答
1

我使用了 Von Lemongargle 教授的解决方案,对我来说这是一个很好的解决方案。重要的:

  1. 在项目中包含规范文件(右键单击-> 包含在项目中)
  2. 给你的项目的规范文件相同的文件名(myproject.csproj,myproject.nuspec)

这在 Visual Studio 2012 中完美运行。

于 2016-07-16T14:40:48.353 回答
0

它们通过包含在 .NET 中的 bin\debug 或 bin\release 文件夹中而进入“lib”文件夹。因此,您需要编译项目以在外部 DLL 上复制本地文件,以便在编译时将它们包含在 bin 文件夹中。

于 2016-03-02T16:16:26.640 回答
0

如果依赖项或库已更改,旧文件会影响打包操作。

  1. 从项目中删除obj和文件夹。bin
  2. dotnet restore
  3. 运行nuget pack yournuspecfile.nuspec -properties Configuration=Release -IncludeReferencedProjects或您的命令。
于 2018-09-21T13:59:34.490 回答