【茶包射手日記】EDMX ADO.NET Provider錯誤疑雲

為調查TFS Build Service建置失敗,登入TFS Build Service主機使用Visual Studio 2013偵察(在TFS Build Service主機安裝VS2013的原委參見TFS Build Service筆記),Visual Studio回報找不到Oracle.ManagedDataAccess.Client ADO.NET Provider錯誤。

問題根源不難理解,TFS Build Service主機沒有安裝及註冊Managed ODP.NET,只靠NuGet下載相關DLL到專案。依之前的研究

如果要執行Entity Framework,應使用install_odpm.bat,第一個參數為安裝資料夾(將解壓縮內容複製到指定路徑再註冊),第二個參數為x86、x64、both三者擇一,第三個參數則需設為true,將元件加入GAC及在machine.config加入設定。

沒有註冊Managed ODP.NET導致錯誤很合邏輯,但吊詭的部分來了:發現建置失敗原因是缺少NuGet Package,補上後Build Service就可編譯成功,但用VS2013編譯仍維持相同錯誤!

這意味「即使沒有註冊Managed ODP.NET,MSBuild也能成功建置使用Oracle.ManagedDataAccess.Client的EDMX」,但Visual Studio建置則會出錯!為了佐證,在Build Service主機上開啟「VS2013開發者命令提示字元」,使用MSBuild.exe(參考)建置EDMX專案,也可成功編譯。

由以上觀察研判-「按下建置鈕後冒出的錯誤未必是建置錯誤」。深入調查找到兩項佐證:

  1. 由輸出視窗查看建置輸出訊息,建置已順利完成(Rebuild All: 2 successed, 0 failed)
  2. 刪除專案bin目錄下的DLL,即使出現錯誤訊息,Visual Studio仍會順利產生DLL檔。

結論:使用Visual Studio建置專案時在錯誤清單出現的錯誤不一定代表建罝失敗。除了MSBuild作業外,Visual Studio還有其他處理程序也可能產生錯誤(先前有類似案例),但要使用VS偵錯程式,就得乖乖排除。

歡迎推文分享:
Published 28 December 2015 07:02 AM 由 Jeffrey
Views: 4,118



意見

# Ammon said on 27 December, 2015 09:28 PM

"但要使用VS偵錯程式,就得乖乖排除。"

可以用 Tools->Attach to process 選擇要偵錯的 Process

# Jeffrey said on 27 December, 2015 10:40 PM

to Ammon, 對耶,沒想到這招,謝謝分享!

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<December 2015>
SunMonTueWedThuFriSat
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication