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

NuGet包中依赖的非托管DLL未复制到客户端输出目录求助

解决NuGet包中非托管DLL复制到输出目录的问题

我帮你搞定这个麻烦!你遇到的核心问题是打包NuGet时,没给非托管DLL配置正确的复制行为,导致客户端项目引入后,DLL的“复制到输出目录”默认是“不复制”。针对新的SDK-style .csproj格式(不用nuspec的情况),你可以按下面的方法修改你的项目文件:

1. 直接配置项目中的非托管DLL

如果你的非托管DLL是放在项目目录下的(比如专门的libs文件夹),在.csproj里添加以下配置:

<ItemGroup>
  <!-- 替换成你的DLL路径和名称 -->
  <None Include="libs\YourUnmanagedDll.dll">
    <!-- 本地构建时复制到输出 -->
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <!-- 告诉NuGet安装时要复制到客户端输出目录 -->
    <PackageCopyToOutput>true</PackageCopyToOutput>
    <!-- 指定在NuGet包中的存放路径,同时兼容新旧项目 -->
    <PackagePath>contentFiles\any\any\libs\;lib\netX.X\libs\</PackagePath>
  </None>
</ItemGroup>

注意:把netX.X替换成你的项目目标框架,比如net6.0、netstandard2.0;YourUnmanagedDll.dll换成实际的DLL名称。

2. 若DLL是其他项目的输出产物

如果这个非托管DLL是解决方案中另一个项目的输出,你可以用Content项来配置:

<ItemGroup>
  <Content Include="..\UnmanagedProject\bin\$(Configuration)\YourUnmanagedDll.dll">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <PackageCopyToOutput>true</PackageCopyToOutput>
    <IncludeInPackage>true</IncludeInPackage>
    <!-- 同样可以指定PackagePath -->
    <PackagePath>contentFiles\any\any\</PackagePath>
  </Content>
</ItemGroup>

3. 确保NuGet包包含内容文件

为了保险起见,在.csproj的PropertyGroup里添加以下配置,确保内容文件被正确打包:

<PropertyGroup>
  <!-- 允许将内容文件打包进NuGet -->
  <IncludeContentInPack>true</IncludeContentInPack>
  <!-- 指定内容文件在NuGet包中的目标文件夹,兼容新旧项目 -->
  <ContentTargetFolders>contentFiles;content</ContentTargetFolders>
</PropertyGroup>

验证步骤

修改完.csproj后,按以下步骤测试:

  • 重新生成你的类库项目,然后打包新的NuGet包
  • 卸载客户端项目中已安装的旧版本NuGet包,清理客户端项目的输出目录(比如bin和obj文件夹)
  • 安装新打包的NuGet包,查看DLL的属性,此时“复制到输出目录”应该已经变成“如果较新则复制”或“始终复制”了

内容的提问来源于stack exchange,提问作者Daniel C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:35:12