将nuget包的文件和文件夹放在根文件夹中

时间:2017-09-26 14:08:10

标签: nuget nuget-package nuspec

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

但问题是它将文件/文件夹与“content”文件夹和程序集中的项目相关联在“lib”文件夹中,但我想要root文件/文件夹和 bin 文件夹中的库类似于此。enter image description here 但是现在我的文件夹结构是这样的: enter image description here

我的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

3 个答案:

答案 0 :(得分:1)

我也在努力解决这个问题,但了解<files />中的/package集合与<contentFiles />中的/package/metadata集合之间的区别非常重要。

<files />集合告诉打包程序要放入包中的文件,放在您的libcontenttools目录中封装

注意:您不需要使用此集合,也可以使用a convention-based working directory

<contentFiles />集合告诉包使用者如何使用包中包含的文件。

在你的情况下,.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>

答案 1 :(得分:0)

我有类似的问题,我必须在包根目录中放置一个文件(因为安装的加载项应用程序总是在那里寻找文件)。

我希望在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/"

快乐包装:)

答案 2 :(得分:-2)

您应该创建自定义.nuspec文件

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
      <id>title</id>
      <version>1.0.0</version>
      <authors>abc</authors>
      <requireLicenseAcceptance>false</requireLicenseAcceptance>
      <description>desc</description>
    </metadata>
    <files>
      <file src="bin\Debug\bin\*.*" target="bin" />
      <file src="bin\Debug\fonts\*.*" target="fonts" />
      ............
    </files>
</package>