NuGet汇编在lib文件夹之外

时间:2012-08-07 23:14:38

标签: nuget nuget-package

我将在这里提出几个问题......首先,使用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混乱?

8 个答案:

答案 0 :(得分:19)

我刚遇到这个问题。 Nuget期待一个看似如下的结构:

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

net40或net20或net45,视您的.net版本而定。

运行

nuget pack yourlibrary.nuspec

打包它。

那将包装批发并将其放入nupkg中。此时错误消息将消失。

答案 1 :(得分:14)

您想要引用的任何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

答案 2 :(得分:12)

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

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

nuget pack sample.csproj -IncludeReferencedProjects

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

答案 3 :(得分:9)

您可以通过在nuspec文件

中添加以下内部标记来添加对其他dll的引用
<package>
   <metadata>
      ...
</metadata>
<files>
 <file src="..\ReferencedFolder\*.*" target="lib\net40\" />
</files>
</package>

答案 4 :(得分:1)

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

答案 5 :(得分:1)

他们进入&#34; lib&#34;文件夹包含在.NET中的bin \ debug或bin \ release文件夹中。因此,您需要让项目编译以在外部DLL上复制本地,以便在编译时将它们包含在bin文件夹中。

答案 6 :(得分:0)

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

  1. 在项目中包含规范文件(右键单击&gt;包含在项目中)
  2. 为规范文件提供项目的相同文件名(myproject.csproj,myproject.nuspec)
  3. 这项工作在Visual Studio 2012中完美无缺。

答案 7 :(得分:0)

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

  1. 从项目中删除objbin文件夹。
  2. 运行dotnet restore
  3. 运行nuget pack yournuspecfile.nuspec -properties Configuration=Release -IncludeReferencedProjects或您的命令。