在构建使用NuGet包的C#代码期间,如何从NuGet包复制文本文件?
如何复制NuGet包中随DLL一起包含的文本文件 当我在另一个解决方案中使用自定义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
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。