.Net uygulamalarında dll arama dizinleri

Friday, November 18, 2011 8:09 PM

Hepimizin bildiği üzere .Net çatısı altında çalışan bütün uygulamalar dll mantığı ile çalışıyor ve biz bu dll ler üzerinden işlemler gerçekleştiriyoruz. Kendi yazdığımız uygulamalardaki referans edilen dll'ler ise Asp.Net ve Asp.Net MVC uygulamaları için "BIN" klasörü altında , masaüstü uygulamalarında da kendi bulunduğu klasörde yada  sistemin PATH değişkeninde bulunan klasörlerde aranır.Eğer bu dll gerel web gerek masaüstü uygulamalarında belirttiğim dizinlerin birisinde değilse programı çalıştırdığınızda bir hata mesajı alırsınız. Bu tip durumlarda (örneğin dlll 'erinizi ayrı bir klasörde toplamak istemeniz durumunda) bir configürasyon dosyası oluştururarak bu durumun üstesinden geleblirsiniz.

 

 WinForm uygulamalar için Visual Studioda projenize sağ tıklayarak Add --> New Item seçeneği ile bir application configuration File eklemelisiniz.Önemli bir noktayı hatırlatmalıyım. Eklemiş olduğunuz Configuration File dosyası uygulamaadı.exe.config şeklinde olmalıdır. Şimdi gelelim configuration File dosyasının içeriğine ;

 

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<runtime>

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

<probing privatePath="extension;data"/>

</assemblyBinding>

</runtime>

</configuration>

 

Yukarıdaki xml configurasyon dosyasını biraz incelemek gerekirse bilmediğimiz sadece bir element var probing elementi.

Orda belirtilen dll dosyalarını extension ve data klasörleri içinde aramak. Eğer eğer bir setup oluşturacaksanız configrasyon dosyasının exe niz ile aynı klasörde olmasına dikkat ediniz.

 

Web uygulamlarında ise aşağı yukarı aynı işlem gerçekleştiriliyor.Açtığımız  web projlerinde zaten bir tane configurasyon dosyası standart olarak gelmektedir. Hepimizin yakından bildiği Web.Config dosyası. 

 

<configuration>

<runtime>

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

<probing  privatePath="App_Data/Dependencies"/>

</assemblyBinding>

</runtime>

</configuration>

 

Aslında web.config dosyasına ekliyeceğimiz tek bir satır."<probing  privatePath="App_Data/Dependencies"/>"

Yukardada aynı şekilde referans edilen dll lerimizi "App_Data/Dependencies" klasörü altında arayacak.

 

 

Etiketler Etiket Yok

Married Cycle

Friday, May 27, 2011 3:29 PM

Basit olarak verilen algoritmayı biraz daha olgunlaştırdım sanırım. Böyle daha mantıklı :)))
protected void MarriedCycle()
{
            if (!this.Evlimi) // İyimser davrandım. Kıymetinizi bilin :))
                return;
            while (Equals(0, 1))
            {
                Erkek erkek = System.World.ErkekBul(); // Algoritma için Bknz:   //http://zeynepbayramoglu.blogspot.com/2011/05/kadn-algoritmas.html
                while (Equals(0, 1)) //Sonsuz döngü
                {
                    if (erkek.ParasiVarMi)
                    {
                        //Kapitalizm is starting......
                        erkek.AktiviteEkle("Ye", this);
                        erkek.AktiviteEkle("İç", this);
                        erkek.AktiviteEkle("Gez", this);
                        erkek.AktiviteEkle("Toz", this);
                        //.
                        //.
                        //.
                        //.
                        //Hayal gücünüze kalmış.
                        if (StabilEvlilikIcinUygunMu(erkek)) //  Algoritma için Bknz: : http://en.wikipedia.org/wiki/Stable_marriage_problem , http://www.eksisozluk.com/show.asp?t=stable%20marriage%20problem
                        {
                            ErkekIcinGameOver(erkek, this);
                            this.Evlimi = true;
                            break;
                        }
                    }
                    this.KeyfiYettiMi = false; //Veya True :)Feedback Alınacak. Kadındır duygular karışık. :)) Durum aktarımı yapılır
                    if (this.KeyfiYettiMi)
                        break;
                }
                if (this.Evlimi)
                    break;
            }
        }

Volatile Anahtar Sözcüğü

Tuesday, March 01, 2011 11:56 AM

Kelime anlamı olarak bir değişkenin geçici, uçucu değere sahip olmasını ifade eder.

Volatile tip tanımlayıcısı (Volatile Type Quantifier) basitçe bir değişken tanımının başında bulunup, bu değişkenin, program dışında bir etki altında bulunabileceğini ifade eder.

Örneğin geliştirdiğimiz bir programda, farklı işlem (process) veya donanımsal etkiler sonucunda değeri değişen bir değişken (variable) kullanıyorsak, bu değişkeni volatile olarak tanımlamamız gerekir. Aksi halde derleyici (compiler) bu değişkeni optimize ederek görevini yerine getiremez bir hale sokabilir.

Bu durumun çok klasik örneklerini IPC (inter process communication, işlemler arası iletişim) konularında görebiliriz.

Klasik bir bariyer kullanılacağını ve işlemin bu bariyere belirli bir amaç için takılacağını düşünelim.

C dilinde böyle bir örneği aşağıdaki şekilde kodlayabiliriz:

int bar = 0;
while(bar == 0);
Yukarıdaki iki satırda görüldüğü üzere "bar" isminde bir değişken tanımlanmış ve bu değişkenin, değeri 0 olduğu sürece sonsuz döngüye girilmiştir. Elbette bu aşamada kod sonsuz döngüye girecek ve ilerlemeyecektir.

Yukarıdaki bu bariyeri kırmak için farklı bir işlem tarafından "bar" değişkeninin değeri değiştirilmek istenirse, bu durumda değişkene müdahale edilememesi söz konusu olabilir. Kullanılan derleyicinin optimize etme seviyesine bağlı olarak, belki de derleyici bu değişken değerini hiç tutmadan ve işletim sistemi üzerinde işlemciye bile uğramadan programı bekletme şekline geçirmiş olabilir.

Derleyicinin bu seviyede bir optimizasyon yapması sonucu değişkene erişmek ve dolayısıyla değişkenin değerini değiştirip, yukarıdaki bariyeri kırmak mümkün olmaz. Bunu engellemek için değişken tanımında volatile kelimesi kullanılır.

volatile int bar= 0;
while(bar==0);
Yeni kodumuzun tek farkı, derleyicinin bu kodda bulunan "bar" değişkenini optimize etmeyecek olmasıdır. Bu sayede kod gerçekten verimsiz bir şekilde çalışacak ancak değişkenin bütün beklentileri karşılaması sağlanacaktır.

Yukarıdaki bu durum, C, C++ dilleri için geçerli ve kullanışlıdır.

JAVA ve C# dilleri için durum biraz farklıdır. Bu dillerde yukarıda anlatılan problemin çözümü için hem volatile hem de synchronized tip tanımlayıcıları (type qunatifiers) bulunur.

Bu dilleri kullanan kişilerin bu iki tip tanımlayıcısı arasındaki farkı bilmesi gerekir.

Synchronized olarak tanımlanmış bir değişken yukarıda anlatılan sorunu çözer ancak JAVA veya C# dillerinin nesne yönelimli programlama özelliğinden dolayı, bu değişkenin tanımlı olduğu sınıftan (class), birden fazla nesne tanımlanması mümkündür.

Örneğin lif (thread) özelliği taşıyan bir java sınıfından tanımlanan bütün nesneler (objects), performans kaygılarından dolayı kendi değişken kopyalarını tutarlar. Dolayısıyla her nesnede kendi değişken bilgisi durur.

Volatile olarak tanımlanan değişkenin farkı ise burada ortaya çıkar. Synchronized tanımlı bir değişkenden farklı olarak, volatile değişken sadece tek bir kopya tutar. Bu kopyaya ana kopya ismi de verilebilir. Tasarıma göre değişmekle birlikte, birden çok kopyanın, tek kopya üzerinden güncellenmesi ve hepsinin aynı olması da aslında tek kopya tutulması olarak düşünülebilir.

Etiketler Volatile

.Net İle Yaz, Java’ya Çevir, Linux Ortamında Çalıştır

Tuesday, July 29, 2008 12:05 PM

Yukarıdaki başlık sanıyorum hepinize çok abartılı gelmiştir. Fakat MainSoft adlı bir fima tarafından çıkarılan Grasshoper adlı ürün bunu mümkün hale getiriyior. Yaptığı iş şu şekilde özetlenebilir; .Net ile uygulamanızı geliştiriyorsunuz, build işleminden sonra uygulamanız Java ortamına yani J2EE üzerinde çalışabilir class dosyaları haline getiriliyor ve bunu daha sonra Java Virtual machine yüklü heryerde çalıştırabiliyorsunuz, ister Linux ortamında isterseniz Unix ortamında, bu size kalmış

Devamı...

Etiketler Etiket Yok

.NET Framework 3.5 çok kullanılan tipler ve namespaceler posteri

Monday, January 14, 2008 11:23 AM

Frameworkun 3.0 ve 3.5 sürümleri ile beraber gelen tip ve namespaceleri de gösteren şöyle bir poster hazırlamışlar:

 

Frameworkun 3.0 ve 3.5 sürümleri ile beraber gelen tip ve namespaceleri de gösteren şöyle bir poster hazırlamışlar:

poster


Güncelleme: XPS formatında biri tek parça ve biri de 16 parçalık halde olmak üzere iki yeni dosya daha eklenmiş. Tek parça halinde bastırmak biraz zor olacağı için, 16 tane A4 kağıda basıp birleştirmek mümkün.

Etiketler Etiket Yok