[英]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 核心版本。
我已將其隔離為具有全新安裝程序項目的單個控制台應用程序,並且僅將content
和output
添加到安裝程序。
為什么安裝程序堅持認為依賴項是 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.