【发布时间】:2020-12-14 21:23:12
【问题描述】:
我已经在这个问题上转了一天多。我有一个使用 sqlite-net-pcl 的 WPF 项目。
我已准备好将此项目打包到 MSI 中进行分发 (x64)。第一个问题是我需要直接为依赖项添加 nuget (SQLitePCLRaw.bundle_green)。当一个 nuget 包包含需要找到进入最终版本的内容文件时,我曾经遇到过这种情况。一帆风顺。
此时,bin/x64/release 运行良好。但是,当我构建安装程序并运行已安装的版本时,出现以下异常:
System.BadImageFormatException:无法加载文件或程序集“System.Runtime.CompilerServices.Unsafe,Version=4.0.4.1,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。不应加载引用程序集以供执行。它们只能在 Reflection-only loader 上下文中加载。 (来自 HRESULT 的异常:0x80131058)---> System.BadImageFormatException:无法加载要执行的参考程序集。
在我的发布文件夹和应用程序安装文件夹之间进行文件比较,我发现以下内容:
Binary Difference: System.Buffers.dll
Binary Difference: System.Numerics.Vectors.dll
Binary Difference: System.Runtime.CompilerServices.Unsafe.dll
Installer Only: netstandard.dll
Installer Only: System.Diagnostics.Tracing.dll
Installer Only: System.IO.Compression.dll
Installer Only: System.IO.Compression.FileSystem.dll
Installer Only: System.Net.Http.dll
在进一步检查并深入了解 DLL 后,我发现如果我用发布文件夹中的二进制文件覆盖 System.Runtime.CompilerServices.Unsafe.dll 一切正常。
进一步挖掘并检查 CompilerServices.Unsafe 的安装程序版本我意识到安装程序正在获取 DLL 的 dotnet 核心版本。
我已将其隔离为具有全新安装程序项目的单个控制台应用程序,并且仅将 content 和 output 添加到安装程序中。
为什么安装程序坚持依赖是 dotnet core 版本?
【问题讨论】:
-
您的项目是否针对 Net Framework?
-
是的,WPF 项目的目标是 Framework 4.8,而安装程序项目的前提条件是 Framework 4.8。
标签: visual-studio installation windows-installer sqlite-net-pcl