首页 文章

如何手动创建Nuget包(没有Nuget.exe或Nuget Explorer)?

提问于
浏览
7

我已经查找了Nuget Package(.nupkg)文件的描述,但是我还没有找到权威指南,大多数都假定您必须使用Nuget Explorer或Nuget.exe - 但是,我只想说我很顽固 .

使用Nuget Explorer创建一个包会产生一个目录,其中包含我想用脚本或其他工具(除Nuget.exe之外)创建的文件 . 因此,鉴于Nuget Explorer生成的这个简单目录布局,我正在寻找.psmdcp文件,.rels文件,[Content_Types.xml]文件以及ProjectX.nuspec文件的定义 .

我可以为[Content_Typex.xml]和.nuspec文件找到一些细节或推断它们 . 我尝试使用lib / dir创建一个包,它足够了's content, and a nuspec file, but apparently that isn',我得到 Package does not contain a manifest - 我怀疑这意味着单独的.nuspec不是完整的清单 .

lib/
  ProjectX.dll
  ProjectX.pdb
package/
  package/services/metadata/core-properties/____hash____.psmdcp
_rel/
  .rels
[Content_Types.xml]
ProjectX.nuspec

没有手工制作.nupkg的指南吗?这个过程真的很复杂吗?

2 回答

  • 3

    我写了一篇关于如何使用NuGet XSD的博客文章:http://www.xavierdecoster.com/post/2012/03/08/Hidden-gem-the-NuGet-package-manifest-XSD.aspx

    另外,请查看文档中的NuGet包约定:http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Package_Conventions

    如果您需要更详细的实践,还有一本Pro NuGet书籍可以深入探讨各种场景:http://www.amazon.com/NuGet-Professional-Apress-Maarten-Balliauw/dp/1430241918

  • 1

    .nuspec定义有关包的属性(元数据)以及要包含在包中的文件列表 . 有很多关于此的描述,因此需要解决的位是工具添加的文件:

    .nupkg文件遵循Open Packaging Convention . 正如您所知,它实际上是一个带有一些预定义文件的.zip文件 . _rels目录包含“parts”之间的关系 . 想想包含图像和Excel电子表格表格的Word文档,以获得“部分”的直觉 .

    包裹大多只包含一个部分;包本身(但可能包含模块的子包) . _rels / .rels文件定义主要顶级包的关系 . 关系具有ID,描述关系类型的URL和目标,该目标是与包具有此关系的文件 . 大多数软件包与.nuspec文件(类型为“manifest”)和.psmdcp文件(属于“核心属性”)有关系 . 这些关系的ID只需要在包中是唯一的,因此它们可以是简单的字符串,例如“R1”,“R2”,但由于某种原因,它们是choco中的“R”16个GUID的第一个字节 .

    核心属性似乎主要是清单文件的重复,使用Dublin Core标签而不是nuspec;我猜在理论上其他程序可以基于这些来呈现包(如果你将它嵌入到Word文档中!) . 可能psmdcp是“Package Services Metadata Dublin Core Properties”的缩写 . 检查NuGet.Core / NuGet.Packaging / PackageCreation / Authoring / PackageBuilder.cs,我们看到文件的名称只是一个“N”格式的GUID(只是数字) . lastModifiedBy属性是“choco”程序集本身的版本信息;如果您自己创建文件,我想你真的可以放任何东西 .

    [Content Types.xml]以MIME类型的形式定义扩展的文件格式 . 这主要是锅炉板 .

    因此,总而言之:基于.nuspec,您可以生成所有其他丢失的文件,并自己组合.nupkg,即使在Powershell脚本中也是如此 .

相关问题