如何让应用使用新版原生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包后重新使用:
- 下载原NuGet包(
.nupkg文件),重命名为.zip并解压 - 找到解压目录中
runtimes对应架构的文件夹,替换其中的旧DLL为新版 - 编写或复用原包的
.nuspec文件,执行打包命令生成自定义包:nuget pack YourPackage.nuspec -Version [原版本号]-custom - 在Visual Studio中添加本地NuGet源(指向自定义包所在目录),引用该自定义版本的包
内容的提问来源于stack exchange,提问作者user3001150
相关产品推荐
相关产品推荐

