打包csproj不包含来自nuspec的文件元素

时间:2014-12-23 20:56:31

标签: 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元素。有解决方法吗?

2 个答案:

答案 0 :(得分:3)

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

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

将nuspec中文件的目标设置为&#34;。&#34;使用pack命令时将其从包中排除。

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

两个解决方案的结果与您的预期相同 - 名为log4net.config的文件将放在包的顶级文件夹中,紧邻.nuspec文件和lib文件夹。 我个人建议你使用选项(a),因为&#34;。&#34;文件夹没有根文件夹以外的含义。

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

答案 1 :(得分:-2)

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

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