我已经在这个上面转了一天多。我有一个使用sqlite-net-pcl.
我准备将这个项目打包成一个 MSI 进行分发 (x64)。SQLitePCLRaw.bundle_green第一个问题是我需要直接为依赖项( )添加 nuget 。当一个 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 核心版本。
我已将其隔离为带有全新安装程序项目的单个控制台应用程序,并且仅将contentand添加output到安装程序中。
为什么安装程序坚持依赖是 dotnet 核心版本?