簡體   English   中英

Visual Studio 安裝程序項目打包 DotNetCore 而不是 Framework

[英]Visual Studio Installer Project packaging DotNetCore instead of Framework

我已經在這個問題上轉了一天多了。 我有一個使用sqlite-net-pcl的 WPF 項目。

我已准備好將此項目打包到 MSI 中以進行分發 (x64)。 第一個障礙是我需要直接為依賴項( SQLitePCLRaw.bundle_green )添加SQLitePCLRaw.bundle_green 我之前遇到過這種情況,當 nuget 包包含需要進入最終版本的內容文件時。 一帆風順。

在這一點上, bin/x64/release是好的並且運行良好。 但是,當我構建安裝程序並運行已安裝的版本時,出現以下異常:

System.BadImageFormatException:無法加載文件或程序集“System.Runtime.CompilerServices.Unsafe,Version=4.0.4.1,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依賴項之一。 不應為執行加載引用程序集。 它們只能在僅反射加載器上下文中加載。 (來自 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 核心版本?

我想找到一個真正的解決方案,但與此同時我在這個線程中找到了一些確認和一個骯臟的解決方法: https : //developercommunity.visualstudio.com/content/problem/810090/visual-studio-installer-projects- extensions-incorr.html

解決方法選項 1:除了添加包含包引用的項目的“主要輸出”之外,還為該項目添加“本地復制的項目”。 這將導致程序集的 lib 版本覆蓋 ref 版本,為您提供所需的行為。 但是,您還會收到有關添加重復文件的警告,因為正如我所說,lib 版本將覆蓋 ref 版本。 這也可能會引入額外的文件,如 xml doc 文件,這些文件在運行時應該沒有影響,但可能會增加安裝程序的大小。 這些也可以從安裝項目中單獨排除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM