我在我的項目中有一段代碼,在某些情況下,它可以在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沒有強命名/簽名。
還有其他的選擇嗎?我接近使用反射來查看我需要的屬性是否存在並以這種方式訪問它們,但我寧願不這樣做,如果我能避免它。
resultFromAnotherFunction是什麼結果? – besworland
我假設你在webapp和windows服務之間傳遞對象?你使用什麼機制來傳遞對象?如果你編寫自定義串行器和解串器,你可以避免把所有東西都集中在一起。 – konqi
它應該是ReportingTimePeriod的一個實例,但方法簽名允許返回'object',因爲它有時可能是別的。有一個檢查,以確定類型是什麼,但我已經評論它,以達到在這種情況下的例外。 – Neil