2012-10-17 11 views
0

序言:我在傳統環境中工作ASP.NET/.NET 2.0,沒有 Visual Studio。 Notepad ++和FTP。雖然不太理想,但這是我現在處理的手。我目前沒有對IIS實例或服務器機器的直接/直接控制權。在ASP.NET C中的會話中鑄造對象#


我在會議上存儲一個對象,Foo類型:

this.Session["foo"] = new Foo(); 
this.Response.Redirect("the/second/page"); 

在第二頁上,我從會話檢索,並試圖投它使用:

Foo foo = (Foo) this.Session["foo"]; 

我收到:

System.InvalidCastException: Unable to cast object of type 'Foo' to type 'Foo'.

當我在第二頁上通過.GetType()比較類型名稱:

Foo in session:  ASP._dev_blah_aspx+Foo 
New instance of Foo: ASP._dev_blah_aspx+Foo 

但是通過.GetType().GUID它們的類型GUID是不同的:

Foo in session:  a67f218d-... 
New instance of Foo: 267f20ea-... 

這是否可能有什麼關係這question/answer?我會嘗試,但請參閱序言。

+0

您的課程在哪裏?它是在App_Code文件夾中,還是在頁面上定義的? – Steven

+0

在頁面上定義腳本塊;所以嵌套類。 – Dan

+0

Foo被標記爲序列化? –

回答

1

當您上傳代碼時,嘗試強制重新編譯。最簡單的方法就是touch你的web.config。只需用Notepad ++打開它並在任何地方添加空間,以便服務器識別它已更改。

+0

讓我給出一個鏡頭:) – Dan

+0

作者golly,它的工作......每次我改變類定義時都必須觸摸'Web.config'。儘管如此,我認爲這是正確的; T-3分鐘。 – Dan

+0

@Bracketworks - 我很高興它的工作!我不確定是否需要每次都做。這個錯誤偶然發生在我身上,我認爲它與緩存服務器中的DLL有關。 –

0

另一種防止這種情況發生的方法是在上傳之前總是預編譯您的網站(使用visual studio中的發佈選項)

+0

對不起@iamkrillin,「... ASP.NET/.NET 2.0,*沒有Visual Studio。」 – Dan

+0

假設你有一個項目文件,你仍然可以通過直接從命令行調用msbuild來實現同樣的目的。 (從項目目錄中)1)msbuild/target:ResolveReferences; _CopyWebApplication/property:Configuration = Release; OutputPath = C:\ Build \ bin; WebProjectOuptutDir = C:\ Build – iamkrillin