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

如何手动创建Nuget包(没有Nuget.exe或Nuget Explorer)?,nuget,nuget-package,Nuget,Nuget Package,我已经查找了Nuget包(.nupkg)中文件的描述,但我还没有找到一个明确的指南,大多数情况下都假设您必须使用Nuget Explorer或Nuget.exe——但是,让我们说我很固执 使用Nuget Explorer创建包会生成一个目录,其中包含我希望使用脚本或其他工具(Nuget.exe除外)创建的文件。因此,考虑到Nuget Explorer生成的这个简单目录布局,我正在寻找.psmdcp文件、.rels文件、[Content_Types.xml]文件的定义,当然还有ProjectX.n

我已经查找了Nuget包(.nupkg)中文件的描述,但我还没有找到一个明确的指南,大多数情况下都假设您必须使用Nuget Explorer或Nuget.exe——但是,让我们说我很固执

使用Nuget Explorer创建包会生成一个目录,其中包含我希望使用脚本或其他工具(Nuget.exe除外)创建的文件。因此,考虑到Nuget Explorer生成的这个简单目录布局,我正在寻找.psmdcp文件、.rels文件、[Content_Types.xml]文件的定义,当然还有ProjectX.nuspec文件

我可以找到或推断[Content_Typex.xml]和.nuspec文件的一些细节。我试着用lib/dir、它的内容和一个nuspec文件制作一个包,但显然这还不够,我得到的
包不包含清单
——我怀疑这意味着.nuspec本身并不是完整的清单

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

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

我写了一篇关于如何使用NuGet XSD的博客文章:

另外,请查看文档中的NuGet包约定:

如果您需要更详细的实践,还有一本Pro NuGet书,深入介绍了各种场景:

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

.nupkg文件遵循开放式打包约定。正如您所了解的,它实际上是一个带有一些预定义文件的.zip文件。_rels目录包含“部件”之间的关系。设想一个包含图像和Excel电子表格的Word文档,以直观地了解“零件”

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

核心属性似乎主要是manifest文件的翻版,用都柏林核心标记代替了nuspec;理论上,我想其他程序也可以基于这些(如果你把它嵌入到Word文档中!)来呈现包。psmdcp可能是“包服务元数据都柏林核心属性”的缩写。通过检查NuGet.Core/NuGet.Packaging/PackageCreation/Authoring/PackageBuilder.cs,我们可以看到文件名只是一个带有“N”格式的GUID(仅为数字)。lastModifiedBy属性是“choco”程序集本身的版本信息;我想你真的可以把任何东西放在那里,如果你自己创建文件的话

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


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

那么,为什么您的Nuget XSD包“”未列出?这并不能回答有关.rels和.psmdcp等辅助文件格式的问题