nuget - 打包 csproj 不包含来自 nuspec 的 files 元素

标签 nuget nuget-package

我正在使用 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.exe 命令行工具进行一些精细调试之后,我的答案是:

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

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

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

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

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

关于nuget - 打包 csproj 不包含来自 nuspec 的 files 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27627875/

相关文章:

.net - 如何打包针对通用Windows平台的.NET库?

nuget - JetBrains Rider EAP RC - nuget.org 源丢失

visual-studio - Visual Studio NuGet/扩展安装失败并显示 "The process cannot access the file because it is being used by another process"

entity-framework-4.1 - 默认为 EF 4.3.1 时需要使用 EF 4.1

visual-studio - 通过NuGet添加System.Data.SQLite不会添加对项目的引用

visual-studio - 为什么使用 NuGet 而不是直接在我的计算机上安装库

visual-studio - "Already has a reference to Essential.Diagnostics"

entity-framework - 更新数据库错误 - NuGet 包 (EntityFramework.SqlMigrations)

visual-studio-2015 - 始终使用最新版本的 nuget 包

c# - SlowCheetah 未预览部署配置文件上的转换