NuGet汇编在lib文件夹之外

far*_*ina 50 nuget nuget-package

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

第二,假设这是可能的,为什么我不断得到"lib文件夹之外的程序集"警告?我已经尝试了所有我能想到的关联程序集将自己添加为NuGet包内的引用.

我的文件结构如下所示

 Root
   - File1.dll
   - lib
     - File2.dll
     - File3.dll
Run Code Online (Sandbox Code Playgroud)

当我告诉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>
Run Code Online (Sandbox Code Playgroud)

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

有没有人了解这个NuGet一塌糊涂?

Jas*_*all 20

我刚遇到这个问题.Nuget期待一个看起来像这样的结构:

root
  - lib
    - net40
      - File1.dll
      - File2.dll
      - File3.dll
Run Code Online (Sandbox Code Playgroud)

适用于.net版本的net40或net20或net45.

nuget pack yourlibrary.nuspec
Run Code Online (Sandbox Code Playgroud)

打包它.

这将收拾dir批发并把它放入nupkg.此时错误消息将消失.

  • 支持的列表`net20`,`net40`,`net45`,...维护在哪里?这些只是防止在添加时将程序集包含到旧项目中(而不是仅仅将文件放在`lib`下)?构建软件包时,这种附加结构通常是手动维护的,还是可以检测并使用.NET版本的程序集? (7认同)
  • @brianary我相信列表在这里:https://docs.microsoft.com/en-us/nuget/schema/target-frameworks#supported-frameworks此链接更完整地记录了上述文件夹结构:https:// docs .microsoft.com/EN-US /的NuGet /创建的程序包/支持,多目标框架 (2认同)

Ale*_*ion 17

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

我用过这个结构:

Root
  - lib
    - File1.dll
    - File2.dll
    - File3.dll
Run Code Online (Sandbox Code Playgroud)

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

  • 对不起,但是什么是lib文件夹?我一直在关注这个教程(http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package)从程序集创建一个包,但没有看到任何lib文件夹 - 只是创建spec文件然后是nupkg文件的命令 (30认同)
  • @DevDave,请参阅:http://docs.nuget.org/Create/Enforced-Package-Conventions (3认同)

Pro*_*gle 13

对于本文截至目前为止的NuGet版本(我也假设更高版本),您可以使用.csproj文件与.nuspec文件一起创建包.我们做的是创建一个.nuspec文件(使用nuget规范然后自定义它)并将其包含在项目中.

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

nuget pack sample.csproj -IncludeReferencedProjects
Run Code Online (Sandbox Code Playgroud)

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


Mad*_*jan 10

您可以通过在nuspec文件中添加以下内部标记来添加对其他dll的引用

<package>
   <metadata>
      ...
</metadata>
<files>
 <file src="..\ReferencedFolder\*.*" target="lib\net40\" />
</files>
</package>
Run Code Online (Sandbox Code Playgroud)