1

プロジェクトにコードがあり、特定の状況では、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を使用して、必要なプロパティが存在するかどうかを確認し、その方法でそれらにアクセスすることに近づいていますが、回避できる場合は、そうしないほうがよいでしょう。

4

1 に答える 1

1

あなたの問題は、各プロジェクトで DataVisualisation コードが複製されていることだと思いますか?

つまり、SolutionA は C:\SolutionA にあり、その下に Web サイトと DataVisualisation フォルダーとコードがあります。SolutionB は C:\SolutionB にあり、その下に Service および DataVisualisation フォルダーとコードがあります。DataVisualisation コードは 2 つのソリューションで同じですが、実際のプロジェクト GUID は異なります...

私が考えることができる他の唯一のことは、サービスでの参照が DataVisualisation クラスの古いバージョンである可能性があるということです。むしろ、両方のソリューションが同じプロジェクト (フォルダー) を参照していることを確認してください。

于 2012-10-29T10:24:46.723 に答える