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

cez*_*ezn 5 c# msbuild nuget nuget-package nuget-spec

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

当我在另一个解决方案中使用我的自定义 NuGet 包时(c:\dev\对于这个例子),其中的结果文件结构c:\dev\package\projectId\lib\netstandard2.0\有许多 DLL 和一个文本文件,比如file.txt. 在构建解决方案时,所有 DLL 都被复制,但文本文件被留下。

.nuspec文件中,我最初将文件包含在<files><file src="foo\file.txt" target="lib\netstandard2.0"/></files>. 该file.txt恢复的NuGet包时包两端向上文件夹,但它不会复制到构建目录。

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

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

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

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

编辑#1:

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

<contentFiles> <files include="any\any\file.txt" buildAction="EmbeddedResource" /> </contentFiles>

这适用于一个小的测试用例。在file.txt显示了很好的Visual Studio和build目录。奇怪的是,它在我的主项目中使用完全相同的语法不起作用(我在两者中都使用 .NET Core 2.0)。此外,在 NuGet 包资源管理器中,它单独显示在包内容中。但是当我在 下添加一些东西时<files><file src="lib\netstandard2.0\test.dll" target="lib\netstandard2.0"/></files>,它就会从那个视图中消失。

编辑#2:

我认为还有其他事情发生……这是我们主项目中的 .nuspec 文件。当我添加带有以下工作建议的内容文件时,它仍然没有显示(对于 .NET Core 2.0 或 .NET Framework 4.7.1)。该.targets文件是否以某种方式搞砸了?

小智 0

您必须定义文件的构建操作。

<contentFiles>
        <!-- Include Assets as Content -->
        <files include="foo\file.txt" buildAction="EmbeddedResource" />
</contentFiles>
Run Code Online (Sandbox Code Playgroud)