You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuget包中exe文件无法复制到引用项目输出目录的nuspec配置问题

解决方案

以下是两种经过验证的可行方案:

方案1:使用自定义Build Target(最稳定,兼容所有项目格式)

该方案不受contentFiles规则限制,不会触发编译报错,同时支持传递引用场景,是最推荐的实现方式。

  • 在你的NuGet包源码目录下创建build文件夹,新建和你的包ID完全同名的.targets文件,例如包ID为PluginLoader.Native则文件名为PluginLoader.Native.targets,文件内容如下:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="CopyPluginLoaderExe" AfterTargets="AfterBuild">
    <Copy 
      SourceFiles="$(MSBuildThisFileDirectory)..\tools\the.exe" 
      DestinationFolder="$(TargetDir)" 
      SkipUnchangedFiles="true" 
      OverwriteReadOnlyFiles="true" />
  </Target>
  <!-- 可选配置:自动设置引用项目的启动程序为the.exe -->
  <PropertyGroup>
    <StartAction>Program</StartAction>
    <StartProgram>$(TargetDir)\the.exe</StartProgram>
  </PropertyGroup>
</Project>
  • 调整你的nuspec配置,确保打包时包含exe和targets文件:
<files>
  <!-- 将exe打包到包内的tools目录 -->
  <file src="你本地存放the.exe的路径" target="tools\the.exe" />
  <!-- 将targets文件打包到包内的build目录,NuGet会自动导入该文件 -->
  <file src="build\PluginLoader.Native.targets" target="build\PluginLoader.Native.targets" />
  <!-- 如果需要区分目标框架,可以将targets放到build\net5.0等对应子目录下 -->
</files>

方案2:修复现有contentFiles配置

你当前的配置不生效大概率是缺失nuspecfiles节点的对应打包配置,或者引用项目使用的是不兼容contentFiles的packages.config格式。

  • 先在nuspec的files节点补充配置,确保本地exe被正确打包到contentFiles对应目录:
<files>
  <file src="你本地存放the.exe的路径" target="contentFiles\any\net5.0\the.exe" />
</files>
  • 保持contentFiles节点的原有配置即可,不要把buildAction改为Content,避免触发CS2015二进制文件编译报错:
<contentFiles>
  <files include="any/net5.0/the.exe" buildAction="None" copyToOutput="true" />
</contentFiles>

注意:该方案仅支持使用PackageReference格式的项目,且不支持传递引用(如果A项目引用你的包,B项目引用A项目,B的输出目录不会自动复制exe,方案1无此限制)。

内容的提问来源于stack exchange,提问作者monty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:27:10