簡體   English   中英

進入 .NET 框架代碼時源文件不匹配

[英]Source files mismatch when stepping into .NET Framework code

動機

我正在嘗試跟蹤打開與 Access mdb 數據庫文件的連接時 .NET 框架引發的異常。 我沒有直接打開數據庫連接,而是使用 DevExpress Xpo 工具之一(確切地說是 XpoDefault.GetDataLayer(...)),它在內部嘗試創建與提供的 mdb 數據庫文件的連接。 該嘗試在 .NET 框架代碼深處的某個地方失敗,並引發異常。

異常具有 System.Data.OleDb.OleDbException 類型,並且對問題來源非常模糊。 消息說“未指定的錯誤”。 ErrorCode 為 -2147467259(NativeCode 為 0)。 很少有信息可以找出無法創建數據庫連接的原因。 我認為可能深入了解 .NET 框架代碼會揭示有關失敗的重要信息。

問題

進入 .NET 框架內部時源文件不匹配。 不一致的執行流程。

描述

我的應用程序針對 .NET 框架 4.6.1 x86 平台並內置調試(發布不會改變任何東西)。 Visual Studio Enterprise 2019 v16.6.3 是我使用的 IDE。 當然,我已經閱讀了所有關於調試到 .NET 框架的信息,但這無助於解決我的問題。

到目前為止我做了什么? 我已成功下載 DevExpres PDB 和源代碼。 沒問題 - 我可以跟蹤 DevExpress 內部的執行(恕我直言,整體調試設置是相當正確的)。 似乎 .NET 框架 PDB 在調試期間從 Microsoft 服務器正確加載。 我認為 Visual Studio 調試設置也很好(據我所知)。

在此處輸入圖像描述

一切順利,直到我需要進入 OleDbConnection.cs 文件,該文件給出以下消息:

在此處輸入圖像描述

問題是我有https://referencesource.microsoft.com提供的所有 .NET 源。 從版本 4.5.1 到最新的 4.8 的所有(包括更新)。

無論我選擇哪一個 - 我總是收到關於源文件版本不匹配的相同消息。 當我忽略該消息並決定使用源文件時,很快就會發現不一致是真實存在的。 我沒有跟蹤源代碼執行,而是跨過評論或執行流程,根本沒有意義,而且很明顯,呈現的源代碼與正在發生的事情不同步。

好的,就是這樣。 我無法走得更遠。 難道我做錯了什么? 在哪里尋找與執行模塊匹配並允許發現我得到的異常的來源的 .NET 框架源?

更新@tgolisch

給出異常的代碼:

Session Session;
ReflectionDictionary reflectionDictionary;
string connectionString;

...

Session = new Session(XpoDefault.GetDataLayer(connectionString, reflectionDictionary, AutoCreateOption.SchemaOnly));

XpoDefault.GetDataLayer(...) 調用中使用的連接字符串:

"Provider=Microsoft.Jet.OLEDB.4.0;Password=;User ID=Admin;Data Source=C:\\Svn\\trunk\\Apps\\bin\\Debug\\DbFile.mdb;Mode=Share Deny None;"

XopDefault.GetDataLayer(...) 是失敗並引發異常的調用。

更新@Perry Qian-MSFT

我完全按照你的建議做了,但沒有成功。 根本沒有任何改善。 但是,在禁用系統程序集的優化后,我取得了相當大的進步,如此所述。 關閉優化后,跟蹤 .NET 框架內部變得可行。 不再隨意跳躍或跨過評論行。

但是,它還沒有完全成功,因為我仍然收到有關執行模塊和源代碼文件版本之間不匹配的消息。

我還注意到,即使我的應用程序將 .NET Framework 4.6.1 作為目標,它在執行期間仍然使用 4.8 版的系統模塊:

在此處輸入圖像描述

這表明我在進入框架內部時應該使用 .NET 框架 4.8 源代碼。 但是等等——我已經嘗試了所有我能得到的同樣不匹配問題的來源。

還可以看出,應用程序運行的系統程序集版本不止一個 - 4.8.4110.0 和 4.8.3761.0,這表明可能使用了不同的源來構建它們。

然而,無論我采用哪種來源,在某些時候總會有關於來源不匹配的消息。

考慮到程序集優化問題已經解決,我現在應該使用哪些框架源來讓它們與正在運行的模塊同步?

進入 .NET 框架代碼時源文件不匹配

請重新連接您的 DB Access 數據庫以刷新您的數據庫,以防 db 層出現一些構建錯誤。

此外,請按照以下建議解決您的奇怪問題:

1)工具-->導入和導出設置-->重置所有設置-->..通用重置所有調試設置。

2)然后,關閉VS,刪除解決方案文件夾下的.vs隱藏文件夾, binobj文件夾。

暫無
暫無

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

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