trapemiyaの日記

hatenablogが新しくなったんで新規一転また2019年1月からちょこちょこ書いてます。C#中心のプログラミングに関するお話です。

Crystal Reports for Visual Studio 2010が動くまでの3つの壁

以下に書かれている通り、先月の22日にCrystal Reports for Visual Studio 2010の正式版がリリースされた。

Crystal Reports for Visual Studio 2010 Production Release Now Available
http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/22083

そこで、ようやく試してみたのだが、3つの壁に阻まれた。一つずつその壁を書いてみる。

1.プロジェクトをコンパイルすると、Crystal Reports絡みのクラスが全て見つからないとエラーになる。

プロジェクトにレポート(.rptファイル)を追加した時点で自動的にCrystal Reports絡みの参照設定が行なわれるが、それらは全て正しく設定されていた。ちなみに以下の3つだ。

CrystalDecisions.CrystalReports.Engine
CrystalDecisions.ReportSource
CrystalDecisions.Shared

(現象)
オブジェクトブラウザにも表示されるし、インテリセンスも働く。なのに、コンパイルするとなぜかそんなクラスは見つからないとしかられるのだ。この時点でオブジェクトブラウザからは消えているし、インテリセンスも働かない。もう一度参照設定をし直すと、オブジェクトブラウザにも表示されるし、インテリセンスも働くようになる。しかし、ふたたびコンパイルするとやっぱりダメになる。つまり、コンパイルするとダメになるのだ。
(解決方法)
プロジェクトのターゲットを.NET Framework 4 Client Profileから.NET Framework 4にしたら上記の不思議な現象は無くなった。理由はよくわからないが、NET Framework 4 Client ProfileはNET Framework 4のサブセットだから、きっと何かが足らないことが影響しているんじゃないかと思う。

2.プロジェクトをコンパイルすると以下のメッセージが表示される。 「ファイルまたはアセンブリ 'file:///C:\Program Files\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet1\crdb_adoplus.dll'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。」

(現象)
そもそもdotnet1なんてフォルダが無い。crdb_adoplus.dllはC:\Program Files\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86にある。

(解決方法)
そこに無いと言われているのだから、素直にdotnet1フォルダを作成し、そこにcrdb_adoplus.dllをコピーした。

3.プロジェクトをコンパイルすると以下のエラーが表示される。 FileLoadException:「混合モード アセンブリはバージョン 'v2.0.50727' のランタイムに対して作成されており、追加の構成情報がないと 4.0 ランタイムでは読み込めません。」

(現象)
エラーメッセージの通り、古いバージョンで作成されているようだ。

(解決方法)
app.configに以下を追加。

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
</startup>

以上で無事にコンパイルできて動くようになった。