【茶包射手日記】只在CSHTML發生的編譯錯誤

在ASP.NET MVC專案新一個View,編輯CSHTML時Visual Studio爽快地賞了我一個錯誤:某個關鍵型別同時出現在兩顆組件(DLL)中!

看了兩顆組件名稱,Afa.WebApi是MVC網站的編譯結果,Afa.WebApi.Client則是先前嘗試不同做法時曾短暫加入,現已不再參照,二者不該並存。詭異點在於這個關鍵型別被Controller及Model廣泛使用,若重複出現在不同組件,MVC專案也該出錯,為何在加入CSHTML前編譯、執行完全正常?

檢查MVC的bin目錄,果然發現Afa.WebApi.Client.dll的蹤影,判斷為先前短暫加入參照時所殘留,而Afa.WebApi.dll與Afa.WebApi.Client.dll意外並存,就是CSHTML抱怨型別重複出現的根源。至於為什麼組件並存只影響CSHTML,原本MVC專案還是可以順利編譯?仔細想想不難理解-關鍵在於二者編譯方式不同!

ASP.NET MVC屬於Web Appplication專案,編譯時要參照哪些組件由csproj列舉項目決定;而CSHTML/Razor採取執行期間動態編譯,像Web Site Project時代的.aspx /.aspx.cs一樣,享有「改完存檔,重新整理網頁就生效」的即時性,而要實現這一點,編譯的參照來源也跟Web Site Project一樣,由放進bin目錄的組件決定。由此編譯行為差異,就不難解釋為何只有CSHTML出錯,Controller/Model未受影響。Case Closed.

歡迎推文分享:
Published 05 March 2016 08:05 AM 由 Jeffrey
Filed under:
Views: 2,528



意見

沒有意見

你的看法呢?

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

5 + 3 =

搜尋

Go

<March 2016>
SunMonTueWedThuFriSat
282912345
6789101112
13141516171819
20212223242526
272829303112
3456789
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

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

文章典藏
其他功能

這個部落格


Syndication