【问题标题】:Nuspec buildAction not applying to contentFilesNuspec buildAction 不适用于 contentFiles
【发布时间】:2017-10-09 12:53:01
【问题描述】:

我最近一直在尝试创建一个 .nuspec 文件,该文件将 .dll 文件附加为嵌入式资源。为此,我在metadata 上使用了contentFiles 标记,设置buildAction="EmbeddedResource",如the official documentation 上的示例内容文件部分 部分所述。

下面你可以看到我的.nuspec文件内容:

<package>
    <metadata>
        <id>MyPackage</id>
        <version>1.0.0.0</version>
        <title>MyPackage</title>
        <authors>Matias G Henschel</authors>
        <owners>Matias G Henschel</owners>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>My package description</description>
        <copyright>2017</copyright>
        <contentFiles>
            <files include="myDllFile.dll" buildAction="EmbeddedResource" />
        </contentFiles>
    </metadata>
    <files>
        <file src="content\myDllFile.dll" target="contentFiles" />
    </files>
</package>

这个包正确地复制了目标项目中的文件,但它没有应用构建操作,这对我来说很重要。

我也尝试过使用 .targets 文件,但没有成功。

如果你想了解更多,我还创建了一个Issue on the GitHub page

PS:恕我直言,contentFiles 和 .targets 文件的文档都需要重新编写,它们不够清晰,而且 .targets 缺少示例。

【问题讨论】:

    标签: nuget nuget-package nuspec nuget-spec


    【解决方案1】:

    您还需要一个文件条目才能将文件实际复制到正确的contentFiles 文件夹:

    <package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
      <metadata>
        …
        <contentFiles>
          <files include="any/any/MyEmbeddedFile.txt" buildAction="EmbeddedResource" />
        </contentFiles>
      </metadata>
      <files>
        <file src="path/to/MyEmbeddedFile.txt" target="contentFiles/any/any/MyEmbeddedFile.txt" />
      </files>
    </package>
    

    请注意,这仅适用于基于 project.json 的项目的 NuGet 3.3+ 和基于 PackageReference 的项目的 NuGet 4+。对于通过packages.config 使用此包的项目,您仍需要将文件添加到content 文件夹并添加自定义目标以使其成为正确的项目类型。

    【讨论】:

    • 该文件是推荐的,但它不起作用。唯一的细节是 any/any 文件夹结构,我尝试过但没有成功。供参考:我使用的是 Nuget 4.1。
    • 只是要明确一点,您要将它安装到哪种项目中?嵌入式资源不会显示在解决方案资源管理器中,您需要在 dotPeek / ILSpy 或 sth 中打开 exe/dll。另请注意,您需要清除 NuGet 缓存,除非您总是在每次尝试使用 dotnet nuget locals all --clear 时增加版本号
    • 我正在尝试将它添加到类库中。版本没有问题,我是手动设置的,我可以正确安装包。它只是没有以正确的方式添加它(嵌入式资源)。我确实使用 ILSpy 检查文件是否在其中但没有附加资源。当我手动将其设置为嵌入式资源时,该文件显示在 ILSpy 中。
    • 消费项目是使用ProjectReference还是packages.config?因为 contentFiles 不适用于 packages.config
    • 它使用packages.config... 但是我该如何解决呢?它应该像任何其他 NuGet 包一样工作......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    相关资源
    最近更新 更多