nuget仅包含内容文件

时间:2015-05-29 16:43:14

标签: package nuget

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

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

有没有办法做到这一点?

谢谢,

雷吉斯

3 个答案:

答案 0 :(得分:4)

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

您必须使用nuget pack MyPackage.nuspec

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

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

答案 1 :(得分:1)

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

要创建“仅内容”的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

答案 2 :(得分:0)

对于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>

将本地文件放入nuget包中的文件,然后将元文件中的contentFiles放入项目中的所有文件作为内容副本输出