在构建使用NuGet包的C#代码期间,如何从NuGet包复制文本文件?

在构建使用NuGet包的C#代码期间,如何从NuGet包复制文本文件?,c#,msbuild,nuget,nuget-package,nuget-spec,C#,Msbuild,Nuget,Nuget Package,Nuget Spec,如何复制NuGet包中随DLL一起包含的文本文件 当我在另一个解决方案中使用自定义NuGet包时(c:\dev\,本例中为c:\dev\package\projectd\lib\netstandard2.0\中的结果文件结构包含许多DLL和一个文本文件,例如file.txt。在构建解决方案时,DLL都会被复制,但文本文件会被留下 在.nuspec文件中,我最初将该文件包含在下。还原NuGet包时,file.txt会在packages文件夹中结束,但不会复制到build目录中 尝试1:我尝试在nu

如何复制NuGet包中随DLL一起包含的文本文件

当我在另一个解决方案中使用自定义NuGet包时(
c:\dev\
,本例中为
c:\dev\package\projectd\lib\netstandard2.0\
中的结果文件结构包含许多DLL和一个文本文件,例如
file.txt
。在构建解决方案时,DLL都会被复制,但文本文件会被留下

.nuspec
文件中,我最初将该文件包含在
下。还原NuGet包时,
file.txt
会在packages文件夹中结束,但不会复制到build目录中

尝试1:我尝试在nuspec文件中使用
contentFiles
属性,因为nuspec多次指向那里。我使用了
nuget.exe pack
命令来处理这个新属性(即没有语法错误),但内容(
file.txt
)的处理方式没有改变

尝试2:我尝试使用
projectId.targets
文件。这将使用具有包含该文件的
ItemGroup
Target
。然后,我尝试使用
Copy
事件,将目标文件夹指向
$(OutputPath)

要将包中包含的文件复制到生成目录似乎非常困难,必须深入研究MSBuild事件等

我在这里不知所措,欢迎任何指点

编辑#1:

根据以下建议,我尝试将此部分添加到元数据中:


这在一个小测试用例中起作用。
file.txt
在VisualStudio和build目录中都显示得很好。奇怪的是,它在我的主项目中使用的语法并不完全相同(我在这两个项目中都使用.NETCore2.0)。此外,在NuGet Package Explorer中,当它单独运行时,它会显示在包内容中。但是当我在
下添加一些内容时,它就会从该视图中消失

编辑#2:


我想还有别的事。当我添加一个包含以下工作建议的内容文件时,它仍然不会显示(对于.NET Core 2.0或.NET Framework 4.7.1)。
.targets
文件是否以某种方式弄乱了这一点?

您必须为文件定义构建操作

<contentFiles>
        <!-- Include Assets as Content -->
        <files include="foo\file.txt" buildAction="EmbeddedResource" />
</contentFiles>

在构建使用NuGet包的C#代码期间,如何从NuGet包复制文本文件

您应该使用
contentFiles
属性,并为文本文件
file.txt
设置
copyToOutput=“true”

我的test.nuspec文件:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>MyTestCore</id>
    <version>5.0.0</version>
    <authors>TestContentFile</authors>
    <owners>TestContentFile</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package Description</description>
    <contentFiles>
      <files include="any/any/file.txt" buildAction="content" flatten="true" copyToOutput="true"/>
    </contentFiles>
  </metadata>

  <files>
    <file src="contentFiles/any/any/file.txt" target="contentFiles/any/any" />
  </files>
</package>

MyTestCore
5.0.0


查看以了解更多详细信息。

谢谢您的提示。这确实有效,但在测试用例之外,我仍然有问题。我用我看到的补充了我的问题。谢谢你的指针和视频!据推测,测试包应该只有
/any/any/file.txt
,对吗?如果我使用上面的.nuspec文件,我会得到以下错误:
找不到路径“E:\source\repos\mzLib\contentFiles”的一部分。
当我从
中的src属性中删除
contentFiles/
时,测试用例会工作。我得到的效果与我在上面的编辑#1中提到的效果相同。。。此修复不适用于我的主项目,但至少测试用例的NuGet包资源管理器中会显示contentFile。