我将在这里提出几个问题......首先,使用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混乱?
答案 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并且没有发出问题。 .nupkg文件显示在正常输出文件夹中(在我的默认情况下,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教授的解决方案,对我来说这是一个很好的解决方案。 重要的是:
这项工作在Visual Studio 2012中完美无缺。
答案 7 :(得分:0)
如果依赖项或库已更改,则旧文件会影响打包操作。
obj
和bin
文件夹。dotnet restore
nuget pack yournuspecfile.nuspec -properties Configuration=Release -IncludeReferencedProjects
或您的命令。