.Net2.0を対象とするMSBuildv3.5を使用して.Netソリューションを構築しています。
Crystal 11.5を使用するようにアップグレードしているため、ソース管理ツリーのバイナリを更新して、10.0DLLではなく11.5バージョンのDLLを含めました。
プロジェクトでは、いくつかのCrystalReportsDLLを参照しています。プロジェクトファイルの小さな例を次に示します。
<Reference Include="CrystalDecisions.ReportAppServer.ClientDoc, Version=10.0.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\Third Party\CrystalReports\CrystalDecisions.ReportAppServer.ClientDoc.dll</HintPath>
</Reference>
<Reference Include="CrystalDecisions.ReportAppServer.CommonControls, Version=10.0.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\Third Party\CrystalReports\CrystalDecisions.ReportAppServer.CommonControls.dll</HintPath>
</Reference>
しかし、マニフェストを見ると、プロジェクトに2回存在していなくても、ClientDocが2回参照されていることがわかります。
.assembly extern CrystalDecisions.ReportAppServer.ClientDoc
{
.publickeytoken = (69 2F BE A5 52 1E 13 04 ) // i/..R...
.ver 11:5:3300:0
}
.assembly extern CrystalDecisions.ReportAppServer.ClientDoc as CrystalDecisions.ReportAppServer.ClientDoc_20
{
.publickeytoken = (69 2F BE A5 52 1E 13 04 ) // i/..R...
.ver 10:0:3300:0
}
プロジェクト内の参照を変更してバージョン11.5.3300.0を指定し、SpecificVersionをTrueに設定しようとしました。どちらも役に立ちませんが、両方のバージョンを参照するマニフェストを取得します。
両方のバージョンがマニフェストに含まれているのはなぜですか?他のすべてのDLLが同じヒントパスで同じ方法で指定されている場合に、これがClientDoc.DLLでのみ発生するのはなぜですか?
また、この方法で出荷された場合、Fusionは最初にどのバージョンを使用しようとしますか?テストした1台のマシンで、バージョン10.0.3000.0が見つからなかったというエラーが発生する可能性があります...11.5がマシン上にありました。別のマシンでは、問題なく動作しているように見えました。