如何在使用该程序包的C#代码构建过程中从NuGet程序包中复制文本文件?

时间:2018-07-04 05:16:49

标签: c# msbuild nuget nuget-package nuget-spec

如何复制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>文件是否以某种方式搞乱了?

2 个答案:

答案 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包添加到项目中,构建项目,文本文件将复制到构建目录:

enter image description here

检查update answer for the similar issue以获得更多详细信息。