Makale Özeti

Uygulamalarımızın veya bileşenlerimizin belirli bir .NET Framework sürümü (veya sürümleri) ile birlikte kullanılabilmesini, geri kalan sürümler ile kullanılamamasını isteyebiliriz. Bu yazıda bunu nasıl yapabileceğimizi ele alacağız.

Makale

Bildiğiniz gibi şu anda kullanılan iki .NET Framework versiyonu mevcut. .NET Framework v1.0 ve v1.1. Şu an için çok büyük farklılıklar içermesede, gelecekte .NET Frameowork’ün yeni sürümlerinin içermesi muhtemel pek çok yeni özelliğin, önceki sürümlerde mevcut olmayacağını tahmin etmek için doğa üstü yeteneklere ihtiyacımız yok. Bu durumda uygulamalarımızın veya bileşenlerimizin belirli bir .NET Framework sürümü (veya sürümleri) ile birlikte kullanılabilmesini, geri kalan sürümler ile kullanılamamasını isteyebiliriz. Bu yazıda bunu nasıl yapabileceğimizi ele alacağız.

 

Bir konfigurasyon dosyası yardımıyla, desteklenen sürümlerin sürüm ve build number larını belirtmemiz yeterli bu işlemi gerçekleştirmek için. Konuya örnek bir uygulama vereyim size: Visual Studio.NET 2003. Kuruluma başladığınızda sisteminizde .NET Framework 1.0 varsa kurulum programı .NET Framework’ün bir üst sürümünü kurana kadar Visual Studio kurulumuna başlayamayacağınızı söylüyor.

 

Bir .NET Framework sürümü belirtmek için uygulama konfigurasyon dosyamızda supportedRuntime ve requiredRuntime elementlerini kullanıyoruz. Bu elementleri aynı zamanda uygulamaların diğer .NET Framework sürümleri ile uyumluluğunu test etmek içinde kullanabilirsiniz.

Not: sBir uygulama konfigurasyon dosyası, uygulama ile aynı isme ve .config uzantısına sahip olmalıdır. Örnek olarak, Yazgelistir.exe adlı bir uygulamanın konfigurasyon dosyasının adı, Yazgelistir.exe.config şeklinde olmalıdır.

 

Şu an için pek fazla alternatifimiz olmadığı için uygulama ve bileşenlerimizde .NET Framework 1.0 ve .NET Framework 1.1 sürümlerini veya her ikisini belirtebiliyoruz. Sadece .NET Framework 1.3’üde belirtebiliriz ama pek anlamlı olmaz, en azından bu sürüm çıkana kadar.

 

.NET Framework sürüm 1.1 için konfigurasyon dosyası hazırlanması

Bu bölümde göstereceğimiz uygulama konfigurasyon dosyası örneği .NET Framework 1.0 ile aşağıda belirtilen durumlarda .NET Framework 1.1’i kullanacak bir uygulama için hazırlanmıştır:

  • Eğer .NET Framework 1.1 sürümü mevcut ise.
  • Eğer hem .NET Framework 1.0 hem de .NET Framework 1.1 mevcut ise.

 

Eğer hem .NET Framework 1.0 hem de .NET Framework 1.1 kurulmuş ancak .NET Framework 1.1 daha sonra sistemden kaldırılmışsa, uygulama .NET Framework 1.0’ı kullanacaktır. Eğer sadece .NET Framework 1.0 kurulmuş ise, uygulama çalışmayacaktır.

 

Aşağıdaki grafikte, Assembly B .NET Framework 1.1’e, MyApp (örnek uygulamamız) ve Assembly A ise, .NET Framework 1.0’a statik referansa sahiptir. Bu örnekte, uygulamamız MyApp, uygulamanın .NET Framework 1.1 sürümünü desteklediğini belirten bir konfigurasyon dosyasına sahiptir böylece uygulama ve Assembly A, .NET Framework 1.1’i kullanmak üzere yönlendirileceklerdir.

 

 

 

.NET Framework 1.0 ile hazırlayacağımız bir uygulamanın, .NET Framework 1.1 üzerinde çalışmasını sağlamak için;

  • Aşağıdaki XML kodunu, uygulamanın konfigurasyon dosyasına ekleyin.

 

<?xml version ="1.0"?>

<configuration>

<startup>

   <supportedRuntime version="v1.1.4122" />

   <supportedRuntime version="v1.0.3705" />        

</startup>

</configuration>

 

.NET Framework sürüm 1.0 için konfigurasyon dosyası hazırlanması

.NET Framework 1.1 ile hazırlanıp, .NET Framework 1.0 üzerinde çalışması istenilen bir uygulama için konfigurasyon dosyasına ekleyeceğimiz bilgiler önceki örneğimize göre biraz daha fazladır. Bu durumda, her Assembly’ın.NET Framework 1.0’ı kullanmak üzere yönlendirilmesi gerekmektedir.

 

Aşağıda vereceğimiz örnek, uygulamamızın aşağıdaki maddelerde belirtilen hallerde .NET Framework 1.0’ın kullanmasını sağlayacaktır.

 

  • Eğer .NET Framework 1.0 kurulmuş ise.
  • Eğer hem .NET Framework hem de .NET Framework 1.1 kurulmuş ise.

 

Eğer sistemde sadece .NET Framework 1.1 mevcut ise uygulama bu sürümü kullanacaktır.

 

 

 

.NET Framework 1.1 ile hazırlayacağımız bir uygulamanın, .NET Framework 1.0 üzerinde çalışmasını sağlamak için;

  • Aşağıdaki XML kodunu, uygulamanın konfigurasyon dosyasına ekleyin.

 

<?xml version ="1.0"?>

<configuration>

    <startup>

        <supportedRuntime version="v1.1.4122"  />

        <supportedRuntime version="v1.0.3705"  />

    </startup>

    <runtime>

        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v1.0.3705">

            <dependentAssembly>

                <assemblyIdentity name="Regcode" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.EnterpriseServices" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Security" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="CustomMarshalers" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="Accessibility" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Configuration.Install" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.DirectoryServices" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Drawing.Design" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.ServiceProcess" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Web" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Web.RegularExpressions" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Web.Services" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Windows.Forms" publicKeyToken="b77a5c561934e089" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Xml" publicKeyToken="b77a5c561934e089" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Data" publicKeyToken="b77a5c561934e089" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Design" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Drawing" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System" publicKeyToken="b77a5c561934e089" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Messaging" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="IEExecRemote" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="IEHost" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="IIEHost" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="ISymWrapper" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="mscorcfg" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Management" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Runtime.Remoting" publicKeyToken="b77a5c561934e089" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Runtime.Serialization.Formatters.Soap" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="System.Web.Mobile" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="Microsoft.Vsa.Vb.CodeDOMProcessor" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="Microsoft_VsaVb" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="Microsoft.Vsa" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="Microsoft.VisualBasic.Vsa" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="cscompmgd" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="Microsoft.JScript" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="Microsoft.VisualBasic" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="Microsoft.VisualC" publicKeyToken="b03f5f7f11d50a3a" culture=""/>

                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>

            </dependentAssembly>

        </assemblyBinding>

    </runtime>

</configuration>

 

Son olarak bu yazıda kullanılan örneklerin ve syntax ın, .NET Framework sürüm 1.1.4322 temel alınarak yazıldığını ve ileride değişebileceğini belirtmek istiyorum.

 

 

 

Kaynak: MSDN

Kadir Sümerkent / kadir@postmaster.co.uk