使用具有包含其他内容的特定命名文件夹的VS2017创建NuGet包

时间:2017-06-28 09:09:17

标签: c# nuget visual-studio-2017

注意 - 这是How do I create a Nuget package with Visual Studio 2017

的后续问题

我的CodeFirstWebFramework NuGet package on GitHub需要在使用它的任何项目中安装专门命名的内容文件文件夹。这些文件是javascript,css,html,图像和模板文件,以支持包创建的Web服务器。它们需要位于名为CodeFirstWebFramework的文件夹中,需要复制到项目输出文件夹中。

在没有关于如何做到这一点的具体文件的情况下,我尝试了各种各样的实验。我可以创建一个名为contentFiles的文件夹,其中包含CodeFirstWebFramework文件夹,并将contentFiles文件夹复制到使用项目中确定(尽管等待尚未发布的VS 2017更新) ,这不会自动复制到输出文件夹中。)

我尝试将文件放在CodeFirstWebframework文件夹中(即从层次结构中删除contentFiles),并将.csproj中的ContentTargetFolders设置为.。这会将文件复制到包中,但不会将它们复制到使用项目中。

 <ItemGroup>
    <Content Include="CodeFirstWebFramework/**/*.*" copyToOutput="true">
      <IncludeInPackage>true</IncludeInPackage>
        <CopyToOutput>true</CopyToOutput>
        <BuildAction>Content</BuildAction>
        <copyToOutput>true</copyToOutput>
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        <PackageCopyToOutput>true</PackageCopyToOutput>
    </Content>
  </ItemGroup>

[注意上面有一些不正确和不必要的XML元素,作为我试图让它做我想做的事情的一部分 - 但这在内容位于contentFiles文件夹时有效]

我现在意识到我并不清楚。我的代码是运行Web服务器的DLL。它需要能够在使用项目的输出文件夹的子文件夹中找到某些js,html等文件和文件夹。目前期望将子文件夹称为CodeFirstWebFramework,但我可以改变它。

通常,使用DLL的项目有另一个文件夹,甚至是一系列文件夹,DLL也会搜索这些文件(因此项目作者可以提供更适合他们需要的版本)。

我希望这些文件夹一致地命名,以便它们与项目相关(即我当前正在调用我提供的CodeFirstWebFramework,并且使用项目是在使用项目的名称之后)。

如果我使用contentFiles/CodeFirstWebFramework作为我的,那么使用项目必须使用contentFiles/ProjectName作为其中的那些 - 我会想象会产生冲突,不会吗?

1 个答案:

答案 0 :(得分:2)

这可以通过指定内容文件不被展平来实现:

<Project>
  <PropertyGroup>
    <NuGetBuildTasksPackTargets>junk-value-to-avoid-conflicts</NuGetBuildTasksPackTargets>
  </PropertyGroup>
  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />

  <PropertyGroup>
    <TargetFramework>netstandard1.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <None Update="SomeExampleFolder\**\*" Pack="true" PackageCopyToOutput="true" PackageFlatten="false" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="NuGet.Build.Tasks.Pack" Version="4.3.0-preview3-4168" PrivateAssets="All" />
  </ItemGroup>
  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>

使用VS 2017 15.3或2.0.0 .NET Core CLI时,可以删除使用预览版NuGet.Build.Tasks.Pack的变通方法。

引用时,它会产生以下输出: enter image description here

相关问题