如何复制NuGet包中包含的文本文件以及DLL?
当我在另一个解决方案(本示例中为c:\dev\
)中使用自定义NuGet软件包时,c:\dev\package\projectId\lib\netstandard2.0\
中的结果文件结构包含许多DLL和一个文本文件,例如file.txt
。在构建解决方案时,所有DLL都被复制了,但是文本文件被遗忘了。
我最初在.nuspec
文件中包括了该文件。还原NuGet程序包后,<files><file src="foo\file.txt" target="lib\netstandard2.0"/></files>
最终出现在packages文件夹中,但是没有将其复制到构建目录中。
尝试1:我尝试使用nuspec文件中的file.txt
属性,因为nuspec reference指向该位置几次。我得到了contentFiles
命令来使用这个新属性(即没有语法错误),但是内容(nuget.exe pack
)的处理方式没有改变。
尝试2:我尝试使用file.txt
文件。这使用的projectId.targets
具有包含文件的Target
。然后,我尝试使用ItemGroup
事件,将目标文件夹指向Copy
。
将包中包含的文件复制到构建目录似乎非常困难,必须深入研究MSBuild事件等。
我在这里不知所措,欢迎任何指针。
编辑#1:
我尝试按照以下建议将本节添加到元数据中:
$(OutputPath)
这在一个小的测试用例中起作用。 <contentFiles>
<files include="any\any\file.txt" buildAction="EmbeddedResource" />
</contentFiles>
可以很好地显示在Visual Studio和构建目录中。奇怪的是,它在使用相同语法的主项目中不起作用(我都在使用.NET Core 2.0)。另外,在NuGet包资源管理器中,它单独出现在包内容中。但是,当我在file.txt
下添加内容时,该内容将从该视图中消失。
编辑#2:
我认为还有其他事情……Here is the .nuspec file from our main project。当我添加具有以下工作建议的内容文件时,它仍然没有显示(对于.NET Core 2.0或.NET Framework 4.7.1)。 <files><file src="lib\netstandard2.0\test.dll" target="lib\netstandard2.0"/></files>
文件是否以某种方式搞乱了?
答案 0 :(得分:0)
您必须为文件定义构建操作。
<contentFiles>
<!-- Include Assets as Content -->
<files include="foo\file.txt" buildAction="EmbeddedResource" />
</contentFiles>
答案 1 :(得分:0)
在构建使用该程序包的C#代码期间,如何从NuGet程序包中复制文本文件?
您应该使用contentFiles
属性,并为文本文件copyToOutput="true"
设置file.txt
。
我的测试.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>
打包此.nuspec文件后,然后将nuget包添加到项目中,构建项目,文本文件将复制到构建目录:
检查update answer for the similar issue以获得更多详细信息。