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

如何将dll作为content添加到Nuget包并自动复制到项目输出目录

错误根因

你遇到的报错是因为NuGet的contentFiles默认针对文本类静态内容做校验,直接将二进制dll放入contentFiles目录会触发非法内容拦截。

解决方案

以下两种方案均可实现需求,可根据你的项目兼容场景选择:

方案1:通过自动导入的Build目标文件实现(兼容性最优)

该方案兼容SDK格式和传统.NET Framework非SDK格式的引用项目,是官方推荐的实现方式:

  1. 在打包项目根目录新建和你的NuGet包ID同名的.targets文件,假设你的包ID为My.Custom.Package,则文件名为My.Custom.Package.targets,内容如下:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <!-- 从NuGet包内的MyDlls目录读取所有文件,设置自动复制到输出目录 -->
    <None Include="$(MSBuildThisFileDirectory)..\MyDlls\*.*">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Link>%(Filename)%(Extension)</Link>
    </None>
  </ItemGroup>
</Project>
  1. 修改你的nuspec配置,删除原contentFiles相关配置,更新文件映射逻辑:
</metadata>
  <files>
    <file src="buildresults\netstandard2.0\*.dll" target="lib\netstandard2.0" />
    <!-- 将net462的dll打包到NuGet包内的MyDlls目录 -->
    <file src="buildresults\net462\*.*" target="MyDlls" />
    <!-- 将targets文件打包到NuGet包的build目录,NuGet会自动将其导入引用项目 -->
    <file src="你本地存放targets文件的路径\My.Custom.Package.targets" target="build\My.Custom.Package.targets" />
  </files>
</package>

方案2:contentFiles加二进制属性声明(仅兼容SDK格式项目)

如果你的引用项目都是SDK格式的.NET Core/.NET 5+项目,可以直接修改现有配置,为二进制文件指定contentType绕过校验:

<contentFiles>
      <files include="contentFiles\any\any\MyDlls\*.*" buildAction="None" copyToOutput="true" />
    </contentFiles>    
  </metadata>
  <files>
    <file src="buildresults\netstandard2.0\*.dll" target="lib\netstandard2.0" />
    <!-- 新增contentType属性声明为二进制流,绕过文本校验 -->
    <file src="buildresults\net462\*.*" target="contentFiles\any\any\MyDlls" contentType="application/octet-stream" />
  </files>
</package>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:24:03