Visual Studio中.NET Core项目引用NuGet包时原生DLL找不到问题
解决原生DLL自动复制到正确输出目录的问题
针对你遇到的Leptonica DLL无法被运行时自动找到的问题,可通过以下几种自动化方案解决:
方法1:修改库项目的.csproj配置
直接在你的.NET Core库项目的.csproj文件中添加原生DLL的复制规则,确保NuGet包打包和项目引用时的路径正确:
<ItemGroup> <!-- 配置x64平台的Leptonica DLL --> <NativeFile Include="x64\leptonica-1.82.0.dll"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </NativeFile> </ItemGroup>
配置后,生成的NuGet包会将DLL正确放入runtimes/win-x64/native目录,引用该包的项目构建时,.NET Core会自动将DLL复制到输出目录的x64子文件夹,无需手动操作。
方法2:添加MSBuild目标强制复制
如果上述配置未生效,可在库项目的.csproj中添加自定义构建目标,在构建完成后自动复制DLL到指定路径:
<Target Name="CopyLeptonicaDllToX64" AfterTargets="Build"> <Copy SourceFiles="$(OutputPath)runtimes\win-x64\native\leptonica-1.82.0.dll" DestinationFolder="$(OutputPath)x64" Condition="'$(RuntimeIdentifier)' == 'win-x64'" /> </Target>
该目标会在每次构建后检查当前运行时标识为win-x64时,自动将DLL从runtimes目录复制到输出目录的x64文件夹。
方法3:自定义NuGet包的Targets文件(手动打包场景)
若你手动编写.nuspec文件打包,可通过添加Targets文件实现自动复制:
- 在.nuspec中添加文件映射:
<files> <file src="x64\leptonica-1.82.0.dll" target="runtimes\win-x64\native" /> <file src="x64\leptonica-1.82.0.dll" target="build\win-x64" /> <!-- 同时添加Targets文件 --> <file src="build\MyTesseractOCR.targets" target="build\win-x64" /> </files>
- 在
build目录下创建MyTesseractOCR.targets文件,内容如下:
<Project> <Target Name="CopyLeptonicaToOutputX64" AfterTargets="Build"> <Copy SourceFiles="$(MSBuildThisFileDirectory)leptonica-1.82.0.dll" DestinationFolder="$(OutputPath)x64" Condition="'$(RuntimeIdentifier)' == 'win-x64'" /> </Target> </Project>
NuGet包安装时会自动导入该Targets文件,在项目构建时执行复制操作。
额外注意事项
确保引用该NuGet包的控制台项目已指定正确的运行时标识,可在项目的.csproj中添加:
<PropertyGroup> <RuntimeIdentifier>win-x64</RuntimeIdentifier> </PropertyGroup>
或在构建时通过命令行参数指定:dotnet build -r win-x64
内容的提问来源于stack exchange,提问作者Jan021981
相关产品推荐
相关产品推荐

