Visual Studio’nun önceki versiyonlarında Crystal Reports kullanarak geliştirdiğiniz bir uygulamayı, .NET Framework versiyonu değiştirmeden ya da değiştirerek, Visual Studio daha yeni bir versiyonu olan ortamına taşıdığınızda, aşağıdaki gibi bir hata alıyorsanız, yapmanız gereken bir kaç işlem var.Burda belirtmem gereken bir nokta var, hatadaki version numaraları farklı olabilir.

The primary reference “CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304, processorArchitecture=MSIL” could not be resolved because it has an indirect dependency on the .NET Framework assembly “CrystalDecisions.Enterprise.Framework, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304” which has a higher version “10.5.3700.0” than the version “10.2.3600.0” in the current target framework.

Öncelikle bu hatanın neden olduğunu anlayalım.Bunun için şöyle bir senaryomuz olsun; .NET Framework 3.5 ile çalışan,Visual Studio 2008 ortamında geliştirdiğimiz uygulamamızı, .NET Framework versiyonu değiştirmeden, Visual Studio 2010 ortamına taşıdığımızı farz edelim. Ve bu uygulamamız Crystal Reports’un bir kaç DLL’ini kullanıyor olsun. Bu taşıma işleminden sonra yukarıdaki hatayı alıyor olalım.

Öncelikle bunun nedeni proje dosyamızdaki referans olarak verdiğimiz DLL’lerin(bu durumda Crystal Reports oluyor) versiyonları, .NET Framework 3.5’a uyan DLL’ler olmaması… .NET Framework, framework’e ait olmayan ama gerekli DLL’leri, Framework’ün kurulduğu yerdeki(C:\Windows\Microsoft.NET\Framework\v2.0\ gibi) “RedistList” klasörü altındaki XML’ler ile yönetir.

Mesela Visual Studio’nun ihtiyaç duyduğu “stdole” ve “adodb” gibi DLL’ler bunlara örnek olarak gösterilebilir. Aslında bir nevi, .NET Framework’ün ya da .NET Framework ile geliştirilen uygulamaların ihtiyaç duyduğu diğer bileşenler diyebiliriz. .NET Framework işte bu bileşenler ile bilgileri “RedistList” klasörü altındaki XML’lerde tutar. Bu noktada .NET Framework 3.0 ve 3.5 versiyonları için bu klasörü bulamayacağınızı söylemek sanırım yerinde olur.Bunun nedeni de bu iki versiyonun altında 2.0 yatıyor olması. .NET Framework 1.x versiyonunda da böyle bir yaklaşım olmadığından bu klasör orada da yoktur. .NET Framework 2.0 ve .NET Framework 4.0 versiyonlarında bu klasör ve içindekiler mevcuttur. Neyse çok uzattık ama en azından hatanın sebebini biraz olsun anlamaya başladık.

Crystal Reports’da .NET Framework ile beraber gelen ama .NET Framework’ten bağımsız bir yapı olduğundan dolayı bununla ilgili bilgiler “ReDistList” klasöründeki “CrystalReportsList2008.xml” dosyasında bulunur. Eski versiyon olarak bu xml’in adı “CrystalReportsList.xml” olabilir. Neyse bu dosyanın içeriğindeki “assembly” bilgilerinin güncel olmamasından dolayı Visual Studio yukarıdaki hatayı veriyor olacaktır. Burada ki “assembly” versiyonları,istediğiniz versiyon olacak şekilde elle düzelttiğiniz zaman yukarıda ki hatadan kurtuluyor olacaksınız.Tabi burada istediğiniz versiyon derken çok doğru bir ifade kullanmadım aslında, Crystal Reports’un GAC’da bulunan istediğiniz versiyonları ile değiştirmeniz gerekir…Aman diyim…Ya da XML’in yeni halini bulup değiştirmeniz de yeterli olacaktır.

Umarım biraz olsun yardımcı olur, şimdilik bu kadar…