プロジェクトにコードがあり、特定の状況では、IISワーカープロセス(HttpHandler内)で実行したり、別のWindowsサービスで実行したりできます。私が作成した参照アセンブリ(DataVisualisation.dll)があり、これはWebサイトコンポーネントとWindowsサービスの両方で使用され、Webサイトとサービスの両方に独自のDLLのコピーがあります。
[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;
これは、Webサイトで実行すると興味深いことに機能しますが、Windowsサービスでは機能しません。私はそれを理解することができません、そして私は他の誰かがそれを理解するのを助けるためにどんな情報を提供するべきかわかりません。私は、WebサイトとサービスがDataVisualisation.dllの独自のコピーを使用していることを期待していたため、比較的自己完結型でした。どういうわけか、さまざまなプロセスが他のDLLについて知っているようです。
厳密な名前付けが私の最初の呼び出しポートであり、GACにDLLをインストールする可能性がありますが、残念ながら、DataVisualisation.dllは、厳密に名前付け/署名されていない、制御できないいくつかのDLLを参照します。
他に選択肢はありますか?Reflectionを使用して、必要なプロパティが存在するかどうかを確認し、その方法でそれらにアクセスすることに近づいていますが、回避できる場合は、そうしないほうがよいでしょう。