9

昨天 NuGet 3.3 已发布(发行说明)并且支持新的 contentFiles 元素(文档)。但是,我似乎无法让这个工作。

我使用 NuGet.exe 作为构建过程。它已更新到 v3.3。我还将我的 Visual Studio 更新到 2015 Update 1 并重新启动。

这是我的 nuspec 文件(Hello.world.nuspec):

<?xml version="1.0" encoding="utf-8"?>
<package>
    <metadata minClientVersion="3.3">
        <id>Hello.world</id>
        <version>1.0.0</version>
        <title>Greeting library</title>
        <authors>Timothy Klenke</authors>
        <description>Greetings for the world</description>
    </metadata>
    <contentFiles>
        <files include="*" />
    </contentFiles> 
</package>

我使用以下命令从命令行运行:

nuget.exe update -Self
nuget.exe pack Hello.world.nuspec

我得到以下信息:

MSBuild 自动检测:使用“C:\Program Files (x86)\MSBuild\14.0\bin”中的 msbuild 版本“14.0”。尝试从“Hello.world.nuspec”构建包。命名空间“ http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd ”中的元素“package”在命名空间“ http://schemas.microsoft.com/packaging/ ”中有无效的子元素“contentFiles” 2010/07/nuspec.xsd '。预期的可能元素列表:命名空间“ http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd ”中的“文件”。

我想我正在运行所有应该支持新 contentFiles XML 元素的最新版本,但这些工具似乎并不知道它。我错过了什么?我知道文件包含属性是垃圾,但是有人有使用新 contentFiles 元素的完整示例 nuspec 文件吗?

4

3 回答 3

11

根据NuSpec 参考,元素<contentFiles>必须在里面。所以它应该是这样的:<metadata>

<?xml version="1.0" encoding="utf-8"?>
<package>
    <metadata minClientVersion="3.3">
        <id>Hello.world</id>
        <version>1.0.0</version>
        <title>Greeting library</title>
        <authors>Timothy Klenke</authors>
        <description>Greetings for the world</description>
        <contentFiles>
            <files include="*" />
        </contentFiles> 
    </metadata>
</package>
于 2015-12-02T12:40:22.117 回答
3

@蒂莫西,

你是对的。它是具有 metadata/contentFiles 元素以及 files 元素中的定义的组合。我有一个 C# 测试实用程序库,当使用 PackageReference 引用它时,它需要在项目输出/bin 文件夹中包含 PowerShell 文件。我将为您包括下面的 XML。我认为您将能够从中获得所需的东西。

特别注意:确保在路径中正确获取您的语言和框架值(即,您的将类似于 cs/net45/YourFile.cs)。我正在使用 any/any/MyFile.psm1 因为我希望将文件视为与语言和平台无关。如果我不这样做,我会在构建时收到代码分析错误。

此外,将文件放在“contentFiles”目录中也很重要。

(在 .nuspec 参考文档中定义的语言和框架选项) https://docs.microsoft.com/en-us/nuget/reference/nuspec#include-content-files

<package>
  <metadata>
    <id>SomeLibrary</id>
    <version>$version$</version>
    <title>SomeLibrary</title>
    <authors>Somebody</authors>
    <owners>Somebody</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Some library that does things I enjoy.</description>
    <releaseNotes />
    <copyright>Copyright 2017</copyright>
    <tags>PowerShell Testing</tags>
    <contentFiles>
      <files include="any/any/SomePS.psd1" buildAction="none" copyToOutput="true" />
      <files include="any/any/SomePS.psm1" buildAction="none" copyToOutput="true" />
    </contentFiles>
  </metadata>
  <files>
    <file src="*.dll" target="lib\net461" />
    <file src="*.pdb" target="lib\net461" />
    <file src="SomePS.psd1" target="contentFiles\any\any" />
    <file src="SomePS.psm1" target="contentFiles\any\any" />
  </files>
</package>
于 2018-06-27T14:37:06.300 回答
1

“/”在节点中很重要。如果使用它将不起作用:

<files include="any/any/x.dll" buildAction="None" copyToOutput="true" flatten="true" />

一定是:

<files include="any\any\x.dll" buildAction="None" copyToOutput="true" flatten="true" />

但它不适用于 .NET 框架??!

于 2020-03-06T02:41:36.030 回答