创建 nuget 包时更改根文件夹

change root folder when creating a nuget package

我正在使用 VS2017 和 _CreateNewNuGetPackage 从 Web 项目 (.Net) 创建 NuGet 包。所有文件都放在 /content 文件夹中。在项目中安装 NuGet 包时的问题是所有文件都将安装在根文件夹中。

我真正想要的是拥有一个 Nuget 包,其中 所有 构建文件都在 content/extraFolder/ 中。

我尝试使用 .nuspec 文件中的标签选项,但 .nuspec 添加了项目中的文件而不是构建文件。

之后我尝试将构建路径设置为 bin\extraFolder 并使用选项 "Nuget pack xxx -BasePath ..\ xxx",但看起来 nuget 使用 vbproj 文件并忽略了 basepath 选项。

我知道 nuget install -outputdir extraFolder/ 是可能的,但我想让 nuget 包的用户更轻松。

我想要的nuget包是这样的:

content/
  extraFolder/
    all build folders and files
lib/
  dll file

现在唯一缺少的是 extraFolder。有人知道我该怎么做吗?

What I really want is to have a Nuget package where all the build files are in content/extraFolder/.

如果我没理解错的话,你可以试试把.nuspec文件中的target="content"改成target="content\content\extraFolder"。所以你的 .nuspec 看起来像:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyTestPackager</id>
    <version>1.0.0</version>
    <authors>Tester</authors>
    <owners>Tester</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package description</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>
  <files>
    <file src="Test.xml" target="content\content\extraFolder\Test.xml" />
  </files>
</package>

然后当你打包这个.nuspec文件时,你会得到以下包:

将这个包添加到项目中,所有构建文件都在content/extraFolder/:

如果我不理解你的问题,请直接在屏幕截图中添加你的当前状态和你想要的内容。

更新:

The part i do not know anything about is the part where MSBuild puts the builded files in the 'bin' folder

如果要将这些文件放在\bin文件夹中,需要在\build文件夹中添加一个.target文件,将这些文件复制到bin文件夹中:

.targets 文件的内容:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <ItemGroup>
  <None Include="$(ProjectDir)content\extraFolder\test.txt">
     <Link>test.txt</Link>
     <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </None>
 </ItemGroup>
</Project>

在 nuspec 文件中,将 .targets 文件添加到构建文件夹中:

查看 了解更多详情。