2012-08-07 58 views
36

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

二,假设可能,为什么我不断得到“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混乱?

回答

9

你想引用的任何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了解更多详细信息。

+19

不好意思,但是什么lib文件夹?我一直在关注本教程(http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package)从程序集创建包并没有看到任何lib文件夹 - 只是一个命令创建一个规范文件,然后一个nupkg文件 – DevDave 2013-07-23 12:16:29

+2

@DevDave,请参阅:http://docs.nuget.org/Create/Enforced-Package-Conventions – 2015-12-18 02:37:35

0

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

7

您可以通过添加以下内标签在nuspec文件添加到另一个DLL引用

<package> 
    <metadata> 
     ... 
</metadata> 
<files> 
<file src="..\ReferencedFolder\*.*" target="lib\net40\" /> 
</files> 
</package> 
+0

我发现'src =“../ Xxx”.. 。“不起作用(尽管文档说它应该);但由于'src'是相对于'BasePath'参数的,所以你可以将'BasePath'改为你想包含的所有文件的根目录。 – 2015-05-29 07:50:21

17

我只是碰到了这个问题。 Nuget期待的结构如下:

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

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

运行

nuget pack yourlibrary.nuspec 

包装起来。

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

+7

支持的'net20','net40','net45',...维护的列表在哪里?这些只是在添加时阻止将程序集包含到较旧的项目中(而不是将这些文件放在'lib'下)?在构建包时,这种附加结构通常是手动维护的,还是可以检测并使用.NET版本的程序集? – brianary 2015-03-16 16:52:19

+2

@brianary我相信这个列表在这里:https://docs.microsoft.com/en-us/nuget/schema/target-frameworks#supported-frameworks和这个链接更完整的文件上面的文件夹结构:https:// docs.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks – 2017-02-03 03:44:58

+0

这里net40显示了构建File * .dll的框架?或者您要使用/引用这些(File * .dll)dll的项目框架? – gmuhammad 2017-10-18 11:44:05

9

对于这篇文章中的当前NuGet版本(并且我假设后面的版本也是这样),您可以使用.csproj文件与.nuspec文件一起创建包。我们所做的是制作一个.nuspec文件(使用nuget spec然后定制它)并将其包含在项目中。

随着定制。nuspec文件,我们使用的命令:

nuget pack sample.csproj -IncludeReferencedProjects 

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

+1

这是一个很差的答案。用VS 2015使用nuget 3.3和你的确切命令,我仍然得到这个错误。 – Mario 2016-04-06 19:52:43

+0

这对我有用。谢谢! – 2016-08-16 18:28:59

0

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

0

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

  1. 包括规范文件(用鼠标右键单击 - >包括项目)项目
  2. 给SPEC文件项目的相同的文件名(myproject.csproj,myproject.nuspec)

这个工作完美地在Visual Studio 2012中。

相关问题