【问题标题】:Packing a csproj doesn't include files element from nuspec打包 csproj 不包含来自 nuspec 的 files 元素
【发布时间】:2014-12-29 07:00:17
【问题描述】:

我正在使用nuget pack myproject.csproj 打包一个 DLL,但我也想包含一个配置模板。这是相关的 nuspec 文件:

<?xml version="1.0"?>
<package >
    <metadata>
        <id>$id$</id>
        <version>$version$</version>
        <title>$title$</title>
        <authors>Chris Vann</authors>
        <owners>MyCompany</owners>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Log4net appenders for targeting MS Azure</description>
        <releaseNotes></releaseNotes>
        <copyright>Copyright 2014</copyright>
        <tags>log4net logging azure</tags>
    </metadata>
    <files>
        <file src="log4net.config" target="."/>
    </files>
</package>

Nuget 正确导入元数据,但在打包 csproj 文件时似乎完全忽略了 files 元素。有解决办法吗?

【问题讨论】:

    标签: nuget nuget-package


    【解决方案1】:

    在对 NuGet.exe 命令行工具进行一些精细调试后,这是我的答案:

    NuGet.exe 使用默认排除列表从包中排除一些通常不需要的文件。 此列表还包含任何以点开头的文件/文件夹。

    将 nuspec 中文件的目标设置为“.”使用 pack 命令时将其从包中排除。

    解决方案是以下之一: (a) 省略target属性(相当于将target设置为“”) (b) 使用 -NoDefaultExcludes 选项,例如:pack myproj.csproj -NoDefaultExcludes

    两种解决方案的结果都与您的预期相同 - 名为 log4net.config 的文件将放置在包的顶部文件夹中,紧邻 .nuspec 文件和 lib 文件夹。 我个人建议您使用选项(a),因为“。”文件夹除了根文件夹没有其他意义。

    一点注意:在我看来,您需要将 log4net.config 添加到 lib 文件夹中,在 DLL 旁边,而不是包的根文件夹中。

    【讨论】:

      【解决方案2】:

      当您 nuget pack 一个项目文件时,它不会查看 nuspec 文件。这是非常基本的。如果你想要更多的控制,比如指定文件,你需要使用 nuget pack mypackage.nuspec

      注意:一旦包含 files 部分,您必须列出 所有 文件。

      【讨论】:

      • 这个问题是我现在必须管理所有文件,正如你所说,还有版本、ID 等。这似乎是一个很大的疏忽。除了默认项目内容之外,为什么不包含 files 指令。
      • 这不是真的。如果您在包含 nuspec 文件的文件夹中运行 nuget pack,它使用 csproj 作为项目,但仍会读取 nuspec 的元数据,您可以在输出中看到它。
      猜你喜欢
      • 2015-10-13
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多