首页 > 解决方案 > 从另一个 Nuget 包引用的 Nuget 包中复制内容文件

问题描述

我想从引用的 Nuget 包中获取一个文件到我的输出文件夹中。这些包是在 .NET Standard 项目上使用 Visual Studio 2017 生成的,并启用了新的 csproj 文件格式和“GeneratePackageOnBuild”。

例如,我有两个 Nuget 包(A 和 B),包 B 依赖于 A。包 A 包含一个内容文件,如配置文件。在这些包旁边,我有一个包含包 B 的应用程序。该应用程序使用包 A 和 B 中的内容,因此需要页面 A 中的文件。

NugetPackageA
|- ClassA.cs
|- RequiredFile.txt

NugetPackageB
|-Dependencies
  |- Nuget
    |- NugetPackageA
|- ClassB.cs

Application
|-Dependencies
  |- Nuget
    |- NugetPackageB
|- Program.cs

我所做的是启用项目文件中的文件打包(基于链接):

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

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

  <ItemGroup>
    <Content Include="RequiredFile.txt">
      <Pack>true</Pack>
      <PackageCopyToOutput>true</PackageCopyToOutput>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <PackagePath>contentFiles\any\any\;content\any\any\</PackagePath>
    </Content>
  </ItemGroup>

</Project>

如果我打开 Nuget 包和 nuspec 文件,我会看到文件已正确打包并且属性似乎没问题:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>NugetPackageA</id>
    ...
    <contentFiles>
      <files include="any/any/RequiredFile.txt" buildAction="Content" copyToOutput="true" />
    </contentFiles>
  </metadata>
</package>

当 Application 直接依赖 NugetPackageA 时,该文件被正确添加到项目中并复制到输出目录。

所以现在我看到了这些解决方法;

  1. 直接添加 Nuget 引用
  2. 制作一个脚本,尝试在 $(NuGetPackageFolders) 中找到正确的包和版本并手动复制文件
  3. 将 NugetPackageB 更改为还包括 RequiredFile.txt

还有其他人对此有解决方案吗?

谢谢。

标签: c#.net-corenuget

解决方案


推荐阅读