【问题标题】:How do I change target filename in nuget package when packing via msbuild pack target?通过 msbuild pack 目标打包时如何更改 nuget 包中的目标文件名?
【发布时间】:2023-07-15 16:05:01
【问题描述】:

我有一个 csproj 文件,其中包含类似的条目

<None Include="library.txt" Pack="true" PackagePath="content" />

该文件以/content/library.txt 正确包含在nuget 包中。 有没有办法改变文件名本身(包路径总是只是目录)。 IE。我追求的是 /content/readme.md 在 nuget 中,无需更改源文件名或扩展名。

这在 vanilla nuget 中是可能的(供参考 How do I change target filename in NuGet Package?)

【问题讨论】:

    标签: msbuild nuget csproj


    【解决方案1】:

    这在 vanilla nuget 中是可能的

    如果您查看底部的注释,根据链接的帖子,这是不正确的。

    src 和 target 中的文件扩展名必须匹配,否则指定的目标将被视为目录。

    同样的行为也适用于csproj。只要包含文件的文件扩展名与输出文件匹配,它就可以工作。使用以下行会将library.txt 文件作为readme.txt 包含在包中。

    <None Include="library.txt" Pack="true" PackagePath="/content/readme.txt" />
    

    但是,如果您要使用不同的文件扩展名,例如PackagePath="/content/readme.md",那么包中的路径就是/content/readme.md/library.txt。请参阅 Jon Skeet 的 comment on an issue on GitHub。这个问题在 Visual Studio 2019 中仍然存在。

    显然,最简单的解决方法是将文件重命名为目标文件名。当然,您可以在构建时复制文件并手动打包或使用 MSBuild 魔法,但我认为您现在无法使用 csproj 执行此操作。

    【讨论】:

    • 很好不知道。
    最近更新 更多