【问题标题】:Put files and folders of nuget package in root folder将nuget包的文件和文件夹放在根文件夹中
【发布时间】:2017-09-26 14:08:10
【问题描述】:

我正在尝试打包我的项目文件并使用以下内容创建 nuget 包: NuGet 包文件.csproj -p Configuration=$(ConfigurationName); -NoPackageAnalysis。

但问题是它将与项目相关的文件/文件夹放在 "content" 文件夹中,并将程序集放在 "lib" 文件夹中,但我希望将文件/文件夹放在根目录中和 bin 文件夹中的库类似于 . 但现在我的文件夹结构是这样的:

我的nuspec文件的结构是

<?xml version="1.0"?>
<package >
    <metadata>
        <id>$id$</id>
        <version>$version$</version>
        <title>$title$</title>
        <authors>abc</authors>
        <owners>abc</owners>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>abc</description>
        <releaseNotes></releaseNotes>
        <copyright>Copyright 9999</copyright>
        <tags></tags>
    </metadata>
    <files>
        <file src="bin\**" target="bin" />
        <file src="$target$\**\*.*" target=""/>
    </files>  
</package>

即使从我的 nuspec 文件中排除 也会产生与第二张图片中显示的相同的输出结构。我正在使用 nuget 版本 4.1.0,我也尝试过使用早期版本的 nuget,例如 2.8.6。

【问题讨论】:

    标签: nuget nuget-package nuspec


    【解决方案1】:

    我也为此苦苦挣扎,但了解/package 中的&lt;files /&gt; 集合与/package/metadata 中的&lt;contentFiles /&gt; 集合之间的区别很重要。

    &lt;files /&gt; 集合告诉打包程序将哪些文件放入包中,在包的lib、content 或tools 目录中。

    注意:你不需要使用这个集合,你也可以使用a convention-based working directory。

    &lt;contentFiles /&gt; 集合告诉包消费者如何使用包中包含的文件。

    在您的情况下,.nuspec 文件应该看起来像这样(虽然不太确定 $target$ 部分:

    <?xml version="1.0"?>
    <package >
        <metadata>
            <id>$id$</id>
            <version>$version$</version>
            <title>$title$</title>
            <authors>abc</authors>
            <owners>abc</owners>
            <requireLicenseAcceptance>false</requireLicenseAcceptance>
            <description>abc</description>
            <releaseNotes></releaseNotes>
            <copyright>Copyright 9999</copyright>
            <tags></tags>
            <contentFiles>
                <files include="bin/**" buildAction="None" copyToOutput="true" />
            </contentFiles>
        </metadata>
        <files>
            <file src="bin\**" target="content\bin" />
            <file src="$target$\**\*.*" target="content"/>
        </files>  
    </package>
    

    【讨论】:

    • 这个答案似乎很有希望,但似乎contentFiles 实际上是一个不同的概念:它仅适用于不可变(不可编辑)的内容文件。在此处查看 emgarten 的评论:github.com/NuGet/Home/issues/2060 因此,我尝试了您的答案,但遗憾的是它没有用
    【解决方案2】:

    我遇到了类似的问题,我必须将文件放在包根目录中(因为已安装的加载项应用程序总是会在那里查找文件)。

    我希望 my.dll 在 packages/My.App.101 文件夹中可用。 所以我这样做了:

    <?xml version="1.0"?>
    <package >
        <metadata>
            <id>My.App</id>
            <version>101</version>
            <title>title</title>
            <authors>abc</authors>
            <owners>abc</owners>
            <requireLicenseAcceptance>false</requireLicenseAcceptance>
            <description>abc</description>
            <releaseNotes></releaseNotes>
            <copyright></copyright>
            <tags></tags>
        </metadata>
        <files>
            <file src="My.App.dll" target="/" />
        </files>  
    </package>
    
    target="/"
    

    所以这应该适合你

    <files>
        <file src="YourFolder\yourfile.extension" target="bin/" />
        <file src="YourFolder\yourfile.extension" target="bin/anotherfolder/" />
    </files> 
    
    target="bin/"
    

    快乐包装:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 2012-07-24
      相关资源
      最近更新 更多