仅限 nuget 包内容文件

nuget pack content files only

我想创建一个 nuget 包(来自某个 c# 项目),但我不想嵌入生成的 dll,而只想嵌入一些静态文件。

我在我的 nuspec 文件末尾添加了一个标签,但 nuget pack 命令继续在包中嵌入 project.dll。 问题是我不想发布这个 dll。

有什么办法吗?

谢谢,

瑞吉斯

是的。您可以创建一个仅引用内容文件的 .nuspec 文件。

你必须使用nuget pack MyPackage.nuspec

不要打包 .csproj 文件,因为这会导致 NuGet 包含构建的程序集。

有关详细信息,请参阅 http://docs.nuget.org/create/nuspec 参考资料。

要将文件打包为内容,在 .nuspec 文档中列出文件时必须使用 target=content

要创建 'content only' nuget 包,您必须使用 <files> 节点列出文件。

<files> 节点必须是 <metadata> 节点的兄弟节点。

<file> 节点必须是 <files> 节点的子节点。

要将文件作为内容包含,请将 <file> 节点中的 target 属性设置为 'content'。

示例:

  <files>
    <file src="{filePath}" target="content"/>
  </files>

如前所述,您必须随后打包 .nuspec 文件而不是 .csproj 文件:

nuget pack *.nuspec

我在这里找到了 target=content 技巧:

https://docs.microsoft.com/en-us/nuget/reference/nuspec#including-content-files

对于 contentFiles,我在 nuspec 文件中使用这种方式:

<?xml version="1.0"?>
<package  xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>    
    <id>DummyNuget</id>
    <version>1.0.1-alpha</version>
    <title>DummyNuget</title>
    <authors>DummyNuget</authors>
    <owners>DummyNuget</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>DummyNuget</description>
    <releaseNotes></releaseNotes>
    <copyright>2019</copyright>
    <tags></tags>
    <contentFiles>
        <files include="**\*.*" buildAction="Content" copyToOutput="true" />
    </contentFiles>
  </metadata>
  <files>
    <file src="<path to files>\*.*" target="contentFiles\any\any" />    
  </files>
</package>

files 将本地文件放入 nuget 包中,然后将 contentFiles 放在元数据中,将项目中的所有文件作为内容复制到输出