C# 从另一个Nuget包引用的Nuget包复制内容文件

C# 从另一个Nuget包引用的Nuget包复制内容文件,c#,.net-core,nuget,C#,.net Core,Nuget,我想从引用的Nuget包中获取一个文件到我的输出文件夹中。这些包是在.NET标准项目上使用Visual Studio 2017生成的,该项目采用新的csproj文件格式并启用了“GeneratePackageOnBuild” 例如,我有两个Nuget包(A和B),包B依赖于A。包A包括一个内容文件,如配置文件。在这些包旁边,我有一个包含包B的应用程序。这个应用程序使用包A和包B中的内容,因此需要A页中的文件 NugetPackageA |- ClassA.cs |- RequiredFile.t

我想从引用的Nuget包中获取一个文件到我的输出文件夹中。这些包是在.NET标准项目上使用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
我所做的是在项目文件中启用文件打包(基于):


netstandard2.0
真的
真的
真的
保存最新
contentFiles\any\any\;内容\任何\任何\
如果我打开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>

NugetPackageA
...
当应用程序直接依赖NugetPackageA时,文件将正确添加到项目并复制到输出目录

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

  • 直接添加Nuget引用
  • 制作一个脚本,尝试在$(NuGetPackageFolders)中找到正确的包和版本,并手动复制文件
  • 将NugetPackageB更改为还包括RequiredFile.txt
  • 还有其他人能解决这个问题吗


    谢谢。

    您是如何使用/安装Nuget的?package.config或PackageReference?我正在使用PackageReference安装它们。如果没有其他人这样做,我明天将尝试编写完整的答案。同时查看如何使用packagename.targets,我不确定它是否可以用于csproj包装(应该)。我想这可能会解决你的问题。软件包A应负责将所需文件复制到安装该软件包的项目的bin/obj文件夹,而不是软件包B。我还怀疑软件包参考安装的“文件添加到项目”部分,我认为这不是它的工作方式(无法使其工作)@alexandru我正在尝试packagename.targets,但它还不起作用。我会继续尝试,但与此同时,我在这里创建了一个测试回购:我发现的相关链接:
    <?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>