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

如何让应用使用新版原生DLL替换NuGet包中的旧版?

解决NuGet依赖原生库版本过时的问题

针对你替换原生DLL后被NuGet恢复覆盖的问题,以下是几种实用解决方案:

方案1:直接安装新版原生库的独立NuGet包

如果该原生库有官方发布的独立NuGet包,直接在项目中安装其最新版本。NuGet依赖解析会自动优先使用更高版本,覆盖原依赖包中的旧版库文件。

方案2:通过项目文件配置强制保留自定义DLL

方法A:添加构建后替换目标

在项目的.csproj文件中插入自定义构建目标,在NuGet恢复完成后自动替换目标DLL:

<Target Name="ReplaceOutdatedNativeDll" AfterTargets="Restore">
  <Copy SourceFiles="$(SolutionDir)CustomLibs\updated-native.dll" 
        DestinationFiles="$(MSBuildProjectDirectory)\runtimes\[你的架构]\native\original-native.dll" 
        OverwriteReadOnlyFiles="true" />
</Target>
  • 将CustomLibs替换为你存放新版DLL的本地目录
  • 替换[你的架构]为实际目标架构(如win-x64、linux-x64等)

方法B:标记本地DLL为项目资源

将自定义DLL加入项目,并配置NuGet不替换它:

<None Include="runtimes\[你的架构]\native\original-native.dll">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  <ExcludeFromPackage>true</ExcludeFromPackage>
</None>

方案3:打包自定义修改版NuGet包

如果前两种方法无效,可修改原NuGet包后重新使用:

  1. 下载原NuGet包(.nupkg文件),重命名为.zip并解压
  2. 找到解压目录中runtimes对应架构的文件夹,替换其中的旧DLL为新版
  3. 编写或复用原包的.nuspec文件,执行打包命令生成自定义包:
    nuget pack YourPackage.nuspec -Version [原版本号]-custom
    
  4. 在Visual Studio中添加本地NuGet源(指向自定义包所在目录),引用该自定义版本的包

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:42:36