【茶包射手日記】Web Site Project的參照設定儲存位置
0 |
被一個茶包困擾了好幾天,總算豁然開朗,也才搞清楚長久以來被我忽略的一項Web Site Project細節。
參與的專案在Web Site Project中呼叫了另一個WCF Project,由於WCF Method傳回的結果型別為另一個Class Library專案中的類別(假設為BooData),而Web Site Project並沒有參照該Class Library。依ASP.NET引用WCF服務的原理,在參照WCF服務時,應會在Web Site Project另行定義BooData類別,用以承接WCF Method的傳回結果。在同事的VS2010運作正常,我的VS2010在參照WCF服務後,卻沒有自動產生BooData類別定義。
反覆刪光本機的檔案重新由版控重新取回最新版本,也重新參照WCF服務,還是無法搞定。最後忽然福至心靈,想到一點: 若Web Site Project原本已參照Boo Library,在引用WCF服務時,即不再另外定義BooData,會直接引用Boo Library的BooData! 查看bin目錄,果然發現BooLibaray.dll的踪跡,Bingo!! 而刪除BooLibrary.dll後,重Build又會再冒出來,經同事提醒我才想到VS2010可以在Web Site Project上按右鍵檢視內容(Property Page)查到參考項目:
原來,Web Site Project先前曾參照過BooLibrary,後來專案架構改變,應該移除參照我卻沒移除,才導致沒有產生BooData定義的問題。但查了web.config,並沒有任何設定用來標示WebSite1參照Solution中的另一個專案。最後才搞懂,參照GAC的元件,才會被記載在web.config:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="false" targetFramework="4.0">
<assemblies>
<add
assembly="System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
</system.web>
</configuration>
而參照Solution其他專案,是Build階段的工作,由Visual Studio或MSBuild執行,負責將專案Build成DLL,複製到Web Site Project的BIN目錄下,而這部分設定被儲存在Solution的.sln檔案中:
Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WebSite1", "D:\WebLab\WebSite1", "{F1877043-8DDB-413B-B84D-E2B6B21014C6}" ProjectSection(WebsiteProperties) = preProject TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0" ProjectReferences = "{BEA9C7F7-FC76-4638-AD90-FE546C3C88AC}|BooLibrary.dll;" Debug.AspNetCompiler.VirtualPath = "/WebSite1" Debug.AspNetCompiler.PhysicalPath = "D:\WebLab\WebSite1\" Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\WebSite1\" Debug.AspNetCompiler.Updateable = "true" Debug.AspNetCompiler.ForceOverwrite = "true" Debug.AspNetCompiler.FixedNames = "false" Debug.AspNetCompiler.Debug = "True" Release.AspNetCompiler.VirtualPath = "/WebSite1" Release.AspNetCompiler.PhysicalPath = "D:\WebLab\WebSite1\" Release.AspNetCompiler.TargetPath = "PrecompiledWeb\WebSite1\" Release.AspNetCompiler.Updateable = "true" Release.AspNetCompiler.ForceOverwrite = "true" Release.AspNetCompiler.FixedNames = "false" Release.AspNetCompiler.Debug = "False" VWDPort = "27116" DefaultWebSiteLanguage = "Visual C#" EndProjectSection EndProject
我因為有些額外調整,沒有用SourceControl上移除參照的sln檔案,在Solution中遺留了WebSite1對BooLibrary的參照而不自知,這也解釋了為何同事的VS2010運作正常,只有我的出錯,所有的疑惑都找到了答案!
玩Web Site Project這麼久,今天又學到新東西,以後"見鬼"的狀況又可以再少一椿,真好!
Comments
Be the first to post a comment