Unity调用外部.NET控制台exe:StreamingAssets重复DLL报错求助
解决Unity中StreamingAssets内同名DLL重复加载报错问题
针对你遇到的Unity识别到StreamingAssets中不同架构同名DLL(如libSkiaSharp.dll)导致的重复插件报错,以下是几个实用解决方案:
方案1:发布单架构的控制台程序
直接让.NET控制台程序只输出当前开发/运行所需的单一架构产物,避免多架构DLL共存:
- 在Visual Studio中右键控制台项目,选择「发布」
- 在发布设置的「目标运行时」下拉菜单中,选择单一架构(比如你开发用的
win-x64) - 取消勾选「生成多个运行时的包」选项
- 完成发布后,将单架构的输出文件复制到Unity的StreamingAssets文件夹中
这样产物里只会有对应架构的DLL,不会出现跨架构的同名文件,从根源上解决重复报错。
方案2:手动编辑插件的.meta配置文件
StreamingAssets中的文件也会生成对应的.meta文件,你可以通过编辑这些文件来指定每个DLL的兼容平台,让Unity Editor只加载当前架构的DLL:
- 在Unity项目中找到重复DLL对应的
.meta文件(比如Assets/StreamingAssets/VideoCaptureService/runtimes/win-arm64/native/libSkiaSharp.dll.meta) - 用文本编辑器打开该文件,找到
platformData节点 - 修改配置,让该DLL仅在对应架构的Standalone模式下启用,禁用Editor模式的兼容:
platformData: - first: Any: second: enabled: 0 - first: Standalone: Windows: ARM64: second: enabled: 1
- 对其他架构的同名DLL执行相同操作,分别指定对应的平台(如win-x86对应
x86,win-x64对应x86_64),并将Any下的enabled设为0
修改后Unity Editor会忽略非当前架构的DLL,不再抛出重复插件错误。
方案3:将控制台程序打包为单文件
利用.NET的单文件发布功能,把所有依赖打包到单个exe中,彻底消除独立DLL文件:
- 在Visual Studio的控制台项目发布设置中,勾选「生成单个文件」选项
- 选择目标运行时为对应的架构(如
win-x64) - 发布后得到一个独立的exe文件,将其复制到StreamingAssets文件夹中
这种方式下没有额外的DLL文件,自然不会触发Unity的重复插件检测。
方案4:分离依赖DLL到Plugins文件夹(可选)
将控制台程序的依赖DLL从StreamingAssets移至Unity的Plugins文件夹,并为每个DLL设置正确的平台兼容:
- 将不同架构的DLL分别放到Plugins下的对应子文件夹(如
Plugins/Windows/x86、Plugins/Windows/x86_64) - 在Unity Inspector中为每个DLL设置对应的「兼容平台」,禁用Editor模式的兼容(仅勾选对应架构的Standalone平台)
- 运行控制台程序时,确保Process.Start的工作目录指向StreamingAssets中的exe,或者将DLL复制到exe的运行目录
这个方案操作稍复杂,适合需要复用DLL的场景,优先推荐前三个方案。
内容的提问来源于stack exchange,提问作者Nick Hudson
相关产品推荐
相关产品推荐

