【问题标题】:Visual Studio Installer Project packaging DotNetCore instead of FrameworkVisual Studio 安装程序项目打包 DotNetCore 而不是 Framework
【发布时间】: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 核心版本。

我已将其隔离为具有全新安装程序项目的单个控制台应用程序,并且仅将 contentoutput 添加到安装程序中。

为什么安装程序坚持依赖是 dotnet core 版本?

【问题讨论】:

  • 您的项目是否针对 Net Framework?
  • 是的,WPF 项目的目标是 Framework 4.8,而安装程序项目的前提条件是 Framework 4.8。

标签: visual-studio installation windows-installer sqlite-net-pcl


【解决方案1】:

我想找到一个真正的解决方案,但与此同时我在这个帖子中找到了一些确认和一个肮脏的解决方法:https://developercommunity.visualstudio.com/content/problem/810090/visual-studio-installer-projects-extensions-incorr.html

解决方法选项 1:除了添加包含包引用的项目的“主要输出”之外,还为该项目添加“本地复制的项目”。这将导致程序集的 lib 版本覆盖 ref 版本,从而为您提供所需的行为。但是,您还会收到有关添加重复文件的警告,因为正如我所说,lib 版本将覆盖 ref 版本。这也可能会引入其他文件,例如 xml doc 文件,这些文件在运行时应该没有影响,但可能会增加安装程序的大小。这些也可以单独从设置项目中排除。

【讨论】:

  • 既然您有解决方法,您可以标记您的答案。谢谢:)
  • 这是一个非常糟糕的解决方法,实际上它似乎只能在经过更多测试后解决某些构建的问题。我认为标记为答案还不够好,但它可能对将来的某人有所帮助,所以我想发布它。
猜你喜欢
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多