Nuget 包装csproj不';不包括nuspec中的files元素

Nuget 包装csproj不';不包括nuspec中的files元素,nuget,nuget-package,Nuget,Nuget Package,我正在使用nuget pack myproject.csproj打包一个DLL,但我也想包括一个配置模板。以下是相关的nuspec文件: <?xml version="1.0"?> <package > <metadata> <id>$id$</id> <version>$version$</version> <title>$title$<

我正在使用
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>

$id$
$version$
$title$
克里斯·范恩
我的公司
假的
针对MS Azure的Log4net附加器
版权所有2014
log4net日志azure
Nuget正确导入元数据,但在打包csproj文件时似乎完全忽略了files元素。有解决方法吗?

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


注意:包括文件部分后,必须列出所有文件。

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

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

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

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

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


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

问题是,正如您所说,我现在必须管理所有文件,还必须管理版本、id等。这似乎是一个很大的疏忽。为什么不在默认的项目内容之外包含files指令呢。如果在包含nuspec文件的文件夹中运行
nuget pack
,它会将csproj用作项目,但仍会读取nuspec中的元数据,您可以在输出中看到它。