2012-10-29 37 views
1

我在我的項目中有一段代碼,在某些情況下,它可以在IIS工作進程(在HttpHandler中)以及單獨的Windows服務中運行。有一個我編寫的引用程序集(DataVisualisation.dll),它被網站組件和Windows服務使用,並且網站和服務都有它們自己的DLL副本。A不能投到B異常

[A]DataVisualisation.ReportingTimePeriod cannot be cast to [B]DataVisualisation.ReportingTimePeriod. Type A originates from 'DataVisualisation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'LoadNeither' at location 'C:\[project]\Actions\DataVisualisation.dll'. Type B originates from 'DataVisualisation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'Default' at location 'c:\[project]\LCFW\lcscheduler\bin\Debug\DataVisualisation.dll'.

提供這樣做的代碼很簡單:

ReportingTimePeriod rp = (ReportingTimePeriod)resultFromAnotherFunction; 

在網站上運行時,而不是在Windows服務,這有趣的工作。我無法弄清楚,我不確定提供哪些信息來幫助其他人弄清楚。我會期望網站和服務使用他們自己的DataVisualisation.dll副本,因此是相對獨立的。不知何故,不同的進程似乎知道另一個DLL。

強命名將是我的第一個調用端口,可能在GAC中安裝該DLL,但不幸的是DataVisualisation.dll引用了一些我無法控制的DLL,這些DLL沒有強命名/簽名。

還有其他的選擇嗎?我接近使用反射來查看我需要的屬性是否存在並以這種方式訪問​​它們,但我寧願不這樣做,如果我能避免它。

+1

resultFromAnotherFunction是什麼結果? – besworland

+0

我假設你在webapp和windows服務之間傳遞對象?你使用什麼機制來傳遞對象?如果你編寫自定義串行器和解串器,你可以避免把所有東西都集中在一起。 – konqi

+0

它應該是ReportingTimePeriod的一個實例,但方法簽名允許返回'object',因爲它有時可能是別的。有一個檢查,以確定類型是什麼,但我已經評論它,以達到在這種情況下的例外。 – Neil

回答

1

我認爲你的問題是你有DataVisualisation代碼重複在每個項目?

即SolutionA位於C:\ SolutionA中,其中包含Website和DataVisualisation文件夾及其下的代碼。而SolutionB位於C:\ SolutionB中,其中包含Service和DataVisualisation文件夾以及位於其下的代碼。即使DataVisualisation代碼在2解決方案中是相同的,實際的項目guid也會不同...

我能想到的唯一的另一件事是您在服務中的引用可能是舊版本的DataVisualisation類。確保兩種解決方案都參考相同的項目(文件夾)。

相關問題