2010-11-18 107 views
0

我目前的問題是,我在調試過程中改變了我的本地主機上的程序集,但我似乎無法獲得在代碼複製代碼的舞臺服務器上被識別的新代碼。Asp.Net程序集未運行

我討厭這麼說,但現在我可以如實說「它在我的機器上運行」。好消息是相同的代碼在另一個人機器上的開發方式也一樣。

我用反射器打開了WebSite.dll,並驗證了反彙編到源代碼,我的新東西在那裏。

我也重新啓動了該網站和應用程序池,並沒有舊的代碼掛在我可以指責。

有一些緩存,我必須在某處無效?

VS2010,C#4.0,IIS7,Windows Server 2008的

感謝, 喬希

+1

你到底知道你的代碼沒有運行?這如何體現? – Oded 2010-11-18 18:20:46

+0

網站是否配置爲4.0? – 2010-11-18 18:42:08

+0

代碼未運行,因爲我可以驗證它是否在兩臺開發機器上運行,並且可以在舞臺服務器上的組件中看到有問題的指令。兩個組件之間沒有尺寸差異。這不是完美的,但它會以驗證 – 2010-11-19 21:51:57

回答

1

有三個approches您可以使用depneding在何種級別的訪問是提供給您。 使用SysInternals Process Explorer

當你點擊一個進程時,DLLs顯示在下面的窗格中。它將包括它作爲工具提示加載的位置,並且可以將其選爲要顯示的列。

獲取該DLL的內存不足

首先得到ASPNET工作進程的內存轉儲。 See this question關於如何。
接受的答案由馬特·艾佛森是使用的Sysinternals的VMMap這...

具有命令行選項 腳本,並可能給你所需要的信息 。

vmmap.exe -p w3wp.exe的C:\ memory.txt

一旦你這樣做,你可以使用WinDbg內存驗證模塊(DLLs)。來自Roberto Farah的This article向您展示瞭如何執行此操作,然後將其從內存中提取到磁盤,然後像以前那樣使用反射器。

集綁定日誌查看器

您可以根據Assembly Binding Log Viewer它會告訴你什麼是加載,它是從哪裏來的。這是一個更好的方法,但要求您更改註冊表以打開日誌記錄,有些人在Non-Dev框中迴避。

+0

的方式執行,現在您提到了sysinternals,我不知道進程管理器是否會完成這項技巧?只是一個想法,以防我稍後參考它。這有助於找出違規的程序集。謝謝! – 2010-11-19 22:00:57

+0

@Josh。你完全正確。我總是忘記這一點。我會將其添加到答案中 – 2010-11-19 22:02:06

1

我以前見過類似的問題,它是一個在你的登臺環境上運行的權限問題,如果你使用的反射可能需要訪問GAC中的一些可能導致問題的DLL,請確保你的應用程序池有訪問外部庫也...