nuget 包中 exe 文件的位置和 nuspec 中匹配的文件标记

Posted

技术标签:

【中文标题】nuget 包中 exe 文件的位置和 nuspec 中匹配的文件标记【英文标题】:location of exe file in nuget package and matching file tag in nuspec 【发布时间】:2022-01-03 22:11:34 【问题描述】:

目前我正在手动创建一个nuget目录结构,nuspec并使用命令行(nuget.exe)打包它。

我的问题是一个 exe 文件,该文件旨在添加到引用它的项目的输出目录中。 exe是插件加载器,引用项目是插件。当插件定义为启动项目时,应该启动exe。

我只是无法将 nuget 中的 exe 放入输出目录中。

exe放在contentFiles/any/net5.0/the.exe下

nuspec 包含以下标签

<contentFiles>
  <files include="any/net5.0/the.exe" buildAction="None" copyToOutput="true" />
</contentFiles>

如果我将 BuildAction 定义为 Content,编译器会抱怨它是二进制文件而不是文本文件 (CS2015)

知道什么会起作用吗?

【问题讨论】:

【参考方案1】:

对于那些偶然发现需要通过 nuget 包打包和分发 .exe(不是工具)的人。

nuget 中的结构需要是:

the.dll 需要在 lib/net5.0 中(或等效项,具体取决于您的代码)

以下文件需要放在contentcontentFiles/any/any目录下

the.exe the.pdb the.xml the.runtimeconfig.json(不确定,但没有它,exe 无法启动)

在生成的 nuget 中,nuspec 看起来像:

<metadata>
   <contentFiles>
      <files include="any/any/the.exe" buildAction="None" copyToOutput="true" />
      <files include="any/any/the.pdb" buildAction="None" copyToOutput="true" />
      <files include="any/any/the.xml" buildAction="None" copyToOutput="true" />
      <files include="any/any/the.runtimeconfig.json" buildAction="None" copyToOutput="true" />
    </contentFiles>
  </metadata>

内容文件将显示在项目根目录下的 Visual Studio 中(dll 除外)。

可以启动分布式exe,如this question所示。

【讨论】:

以上是关于nuget 包中 exe 文件的位置和 nuspec 中匹配的文件标记的主要内容,如果未能解决你的问题,请参考以下文章

使用 .targets 替换 NuGet 包中的文件

NuGet 包中的文档消失了

如何在jar包中调用exe等资源文件

nuget.exe在哪里?

NuGet 包中的运行时异常引用类型:'无法加载文件或程序集'Foo'。该系统找不到指定的文件。'

显式设置 NuGet 包中定义的构建目标的顺序