【问题标题】:Specifying files to add to a nuget package in .csproj file在 .csproj 文件中指定要添加到 nuget 包的文件
【发布时间】:2020-09-20 00:36:58
【问题描述】:

我正在从一些代码创建一个 nuget 包,但还需要使用该包部署一些工具。

在 .nuspec 文件中,我可以使用 <files> 元素执行此操作,这一切都很好。

但是,当使用 .nuspec 文件时,csproj 文件中的 packageReferences 不包含在内,并且在手动包含它们时(使用 <dependencies> 元素)我发现了一些问题。

创建的包似乎也总是恢复为 .net 框架包,即使它以 .net 为目标,如 this question

如果我改用 .csproj 格式来指定 nuget 包详细信息,我希望所有这些问题都会消失,但是有了read the docs,我不知道该怎么做。

有人知道它是怎么做的吗?

如果没有,任何人都可以阐明从 .nuspec 文件创建的 .net 框架/.net 核心 nuget 包,该包可以恢复到正确的目标版本并尊重包依赖关系吗?

【问题讨论】:

    标签: c# .net nuget .net-standard nuspec


    【解决方案1】:

    查找/发现并不容易,但 NuGet 的 MSBuild tasks 文档页面有一个名为“including content in a package”的部分,它告诉您有关 MSBuild 项目的 PackagePath 元数据,NuGet 使用该元数据将文件复制到包中.

    所以,在你的 csproj 中,你可以有这样的东西:

    <ItemGroup>
      <None Include="..\MyTool\Tool.exe" PackagePath="tools" Pack="true" />
    </ItemGroup>
    

    然后你的包将包含tools\Tool.exe。我不是 100% 确定需要 Pack="true",但文档在示例中使用它,所以我把它放在这里,以防万一。

    您可以使用 MSBuild 的 globbing 来复制整个目录,如果这样更容易的话。 Include="..\MyTool\*"。我的 MSBuild 技能不是那么先进,所以我不知道如何 glob ..\MyTool\**\*,这意味着所有子目录中的所有文件,同时在 PackagePath="???" 元数据中保持正确的目录布局。所以我能建议的最好的方法是每个目录一个 glob。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多