使用Visual Studio 2017为Nuget包中的内容文件指定PackageFlatten

时间:2017-11-16 01:04:35

标签: visual-studio nuget

我试图在C#.Net项目中获取内容文件,该项目正在打包到Nuget包中以展平包含的文件夹。基于this page,似乎可以使用flatten属性。

但我想使用VS2017内置的新MSBuild Nuget包装。基于this page,我应该可以使用<PackageFlatten>标记实现相同的目标,但我无法使其发挥作用。

这是一个演示问题的基本项目文件。我期待文件夹层次结构下的单个内容文件。\ RemoveMe \ ContentFile.txt最终位于。\ content \ ContentFile.txt下的Nuget包中 - 即没有文件夹RemoveMe。但我仍然得到这个子文件夹。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="RemoveMe\ContentFile.txt">
      <PackageFlatten>true</PackageFlatten>
    </Content>
  </ItemGroup>

</Project>

1 个答案:

答案 0 :(得分:1)

  

使用Visual Studio 2017为Nuget包中的内容文件指定PackageFlatten

对我而言,这应该是关于参数flatten="true"的问题。根据文件NuGet ContentFiles Demystified

  

展平 - 文件是否应全部传递到项目的根文件夹,还是应保留打包的文件夹结构。默认值为false,表示应创建(如有必要)并保持不变他们在pacakge中的TFM文件夹之后的结构。

因此,如果我们在.nuspec文件中设置此参数flatten="true",然后打包此.nuspec,将generate nuget包安装到项目中,该文件应该传递到项目的根文件夹。但是在将这个包安装到项目之后,仍然在子文件夹RemoveMe中的那个文件不在根文件夹中。

我还测试了其他参数buildAction="content" copyToOutput="false",它们都可以正常工作。

因此,对于参数flatten="true"应该是一个问题,我提交this issue on GitHub,您可以跟踪此问题。