luc*_*iet 7 nuget nuget-package
我寻找那些进入一个NuGet包(.nupkg)这些文件的描述,但我还没有找到一个明确的指导,大部分都假定你有使用的NuGet资源管理器或Nuget.exe - 但远,我只想说我很顽固.
使用Nuget Explorer创建一个包会产生一个目录,其中包含我想用脚本或其他工具(除Nuget.exe之外)创建的文件.因此,考虑到通过的NuGet浏览器产生这个简单的目录结构,我正在寻找的.psmdcp文件,该文件的.rels的[Content_Types.xml]文件的定义,当然还有ProjectX.nuspec文件.
我可以为[Content_Typex.xml]和.nuspec文件找到一些细节或推断它们.我试图使一个包,只具有的lib /目录,它的内容和nuspec文件,但显然这是不够的,我也得到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
Run Code Online (Sandbox Code Playgroud)
没有手工制作.nupkg的指南吗?这个过程真的那么复杂吗?
.nuspec 定义有关包的属性(元数据)以及要包含在包中的文件列表。对此有很多描述,因此需要解决的是工具添加的文件:
.nupkg 文件遵循开放打包约定。正如您所发现的,它实际上是一个包含一些预定义文件的 .zip 文件。_rels 目录包含“部分”之间的关系。想象一个包含图像和 Excel 电子表格的 Word 文档,以直观地了解“部分”。
包装大多只包含一个部分;包本身(但可能包含模块的子包)。_rels/.rels 文件定义主顶级包的关系。关系有一个 ID、一个描述关系类型的 url 和一个目标,目标是与包具有此关系的文件。大多数包与 .nuspec 文件(属于“清单”类型)和 .psmdcp 文件(属于“核心属性”类型)有关系。这些关系的 ID 只需要在包内唯一,因此它们可以是简单的字符串,例如“R1”、“R2”,但由于某种原因,在 choco 中它们是“R”+ GUID 的第 16 个字节。
核心属性似乎主要是清单文件的重新哈希,使用都柏林核心标签而不是 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 脚本中也是如此。
我写了一篇关于如何使用 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
| 归档时间: |
|
| 查看次数: |
3704 次 |
| 最近记录: |