views:

134

answers:

1

I am building a .Net solution using MSBuild v3.5 targeting .Net 2.0.

We are upgrading to use Crystal 11.5 so I have updated the binaries in our source control tree to contain the 11.5 version DLLs instead of the 10.0 DLLs.

In the project I reference some Crystal Reports DLLs. Here is a small example of the project file:

<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>

But, when I look at the manifest it shows that ClientDoc is referenced twice even though it isn't in the project twice:

.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 }

I've tried to modify the reference in the project to specify version 11.5.3300.0 and also set SpecificVersion to True. Neither of those help, I still get a manifest that references both versions.

Why are both versions being included in the Manifest? Why is this only happening with the ClientDoc.DLL when all the other DLLs are specified the same way with the same hint path?

Also, if it is shipped this way, which version will fusion try to use first? It seems that on one machine we tested we can an error that version 10.0.3000.0 was not found... 11.5 was on the machine. Where on another machine it seemed to work fine.

A: 

After alot of playing, googling and using reflector I finally figured out what was going on here.

This project has a DLL reference to one of our common framework DLLs which was still being built with the 10.x version of the Crystal reports DLLs. So it seems that that version's reference is added to the manifest of the referencing DLL in addition to the version that is directly pointed to and referenced.

When I rebuild that common DLL with the 11.5 versions of the Crystal binaries the manifest correctly only list the 11.5 version now.

PilotBob