猿问

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

如何复制与 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:我尝试使用contentFilesnuspec 文件中的属性,因为 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文件是否以某种方式搞砸了?


慕仙森
浏览 182回答 2
2回答

跃然一笑

您必须为文件定义构建操作。<contentFiles>&nbsp; &nbsp; &nbsp; &nbsp; <!-- Include Assets as Content -->&nbsp; &nbsp; &nbsp; &nbsp; <files include="foo\file.txt" buildAction="EmbeddedResource" /></contentFiles>
随时随地看视频慕课网APP
我要回答