2010-07-05 20 views
1

我正在更新我們的CruiseControl.NET持續集成環境,從使用舊版Visual Studio 2008 Web部署項目到Visual Studio 2010.爲什麼我的MVC應用程序將GetExecutingAssembly名稱報告爲App_web_xxxxx.dll?

我不想使用Beta 2010 Web部署項目,因爲我認爲我可以使用2010年更新的出版/包裝。

目前我已設法配置CruiseControl腳本兩次調用MSBuild。首先在Release配置中構建解決方案,然後打包MVC項目。

然後,我從一個可怕的文件路徑(這使我懷疑我沒有做這個正確的,但是嘿)和轉換web.configs從測試服務器中從包複製出正確的文件。

這是終於正常工作,但不同於當我使用2008部署項目時,此代碼將ExecutingAssembly作爲App_web_xxxxx.dll返回,而不是返回Company.Product.Web.dll。

Dim CurrentAssembly As Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly 
Dim version As String = CurrentAssembly.GetName.Version.ToString 

我知道GetName返回的字符串不僅僅是名稱,而且我正在調試它以查看它包含的內容。我知道這是編譯/緩存的DLL,但爲什麼不是MVC箱中的那個。

乾杯

回答

2

我想通了這一點 - 基本上,當我在裏面footer.ascx調用Assembly.GetExecutingAssembly。這意味着代碼是在頁腳的動態編譯的dll中。

我想要的是MVC網站的DLL。所以我在控制器上使用擴展屬性來設置ViewStates和Assembly信息。

在我的情況下,我會再次使用這個代碼,所以擴展屬性是在不同的Assemmly中,我可以包含在各種MVC項目中。這意味着我必須更改代碼才能使用Assembly.GetCallingAssembly,但現在它的工作原理就是我想要的。

相關問題