C#nedir?com
 
YAZAR HAKKINDA
Mustafa Erhan Ersoy
Mustafa Erhan Ersoy
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
14 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: (task) dosyalari dosyalarinin hedefi incelemeye kaynak kullanarak kullanilarak nant?i ortaya projeleri projelerini projesi projesine projesini C# / VC#/.NET Mustafa Erhan Ersoy
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 2.9.2005
Okunma Sayısı : 19906
Yorum Sayısı : 1     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 21.4.2021
Turhal Temizer
Mac OS/X Removing CUDA 21.4.2021
Burak Selim Şenyurt
Tie Fighter Değil, Project Tye! 21.4.2021
Burak Selim Şenyurt
Stackoverflow Sevgi Anketinde Yıllardır Bir Numara Çıkan Programlama Dili Rust Kimdir? 21.4.2021
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
NAnt ile Otomatik Build İşlemi Gerçekleştirme
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
NAnt, açık kaynak kodlu, build otomasyon aracıdır. Java projeleri için geliştirilmiş olan Ant’ın .NET uyarlamasıdır.
Yazılım ürünlerimizi ortaya çıkarırken pekçok rutin işlem gerçekleştiririz. Build otomasyonu, bu rutin işlemleri tek hamlede herhangi bir kişinin yapabileceği hale getirir.

NAnt olması gerektiği gibi Mono ile de uyumludur. Proje dosyaları Xml tabanlıdır text dosyalardır. Proje dosyalarının uzantısı build’dir fakat bu bir zorunluluk değildir.

İlk NAnt Projemiz Şimdi NAnt projelerini oluştururken kullandığımız üç temel kavram ile NAnt’ı incelemeye başlayalım.
Öncelikle aşağıdaki basit NAnt projesine gözatalım. Proje içerisindeki işlemlerin ne olduğu şuan için önemsiz. Target, Task ve Dependency kavramlarına odaklanın ve ne anlama geldiklerini tahmin etmeye çalışın :

<?xml version="1.0"?>
<project name="Merhaba Dunya" default="test">
    <property name="basename" value="MerhabaDunya"/>
    <property name="debug" value="true"/>

    <!-- TARGET 1 -->
    <target name="build">
        <!-- TASK 1 -->
        <delete failonerror="false">
            <fileset>
                <include name="${basename}.exe"/>
                <include name="${basename}.pdb"/>
            </fileset>
        </delete>
        
        <!-- TASK 2 -->
        <csc target="exe" output="${basename}.exe" debug="${debug}">
            <sources>
                <include name="${basename}.cs"/>
            </sources>
        </csc>
    </target>

    <!-- TARGET 2 -->
    <target name="test" depends="build">
        <exec program="${basename}.exe" basedir="."/>
    </target>
</project>
  • Görev (Task) : Build projesi içerisindeki her bir aksiyon.
  • Hedef (Target) : Görevler topluluğu.
  • Bağımlılık (Dependency) : Hedefler arası ilişki.
Gördüğünüz gibi herbir NAnt projesi aslında text tabanlı bir Xml dosyasıdır. NAnt projeleri bir project ana düğümü altında sıralanan görevlerden (Task) oluşur. Örneklerimde sizlere sınırlı sayıda görevden bahsedebileceğim. Tüm görevleri NAnt’ın yardım dökümanlarında bulabilirsiniz.
delete (anlaşılacağı üzere belirtilen dosyaları silmeye yarar), csc (C# derleyicisi ile kaynak kodu derler) ve exec (belirtilen uygulamayı çalıştırır) birer görevdir (task).

Dikkat edeceğiniz üzere project ana düğümümüz iki adet hedeften oluşuyor ("build" ve "test") ve bu projenin ana hedefi "test" hedefidir.
depends attribute’ının belirttiği üzere "test" hedefi "build" hedefine bağımlıdır. Yani "build" hedefi başarıyla tamamlanmadığı sürece test hedefi çalıştırılmaz.

Önemli Not : Eğer bu bağımlılığı ortadan kaldırırsak yani depends attribute’ını silersek sadece "test" hedefi çalıştırılır.

Aslında yukarıdaki 20 satırlık NAnt projesinin yaptığı işlem çok basit :
Öncelikle "MerhabaDunya.exe" ve "MerhabaDunya.pdb" dosyalarını silip
"MerhabaDunya.cs" kaynak kodunu derleyip "MerhabaDunya.exe" çalıştırılabilir dosyasını oluşturuyor.
Daha sonra da bu çalıştırılabilir dosyayı çalıştırıyor.

Biz bu üç işlemi üç satır DOS komutu yazarak gerçekleştirebilirdik. Peki neden kendimizi zorlayıp bu NAnt projesini yazıyoruz ?
Bu soruya cevap verebilmek için yukarıda verdiğim basit örnekten çok daha fazlasını düşünmek lazım. Gerçek hayat projeleri sadece kaynak kodlardan oluşmaz, dolayısıyla hedef ürünün ortaya çıkabilmesi için basit derleme işlemlerinin ötesinde zaman alan ve yaratıcı olmayan işlemler rutin olarak gerçekleştirilir. Kodlar, SCM’den alınır, derlenir, testler çalıştırılır, veritabanı oluşturulur, gerçek ortama taşıma yapılır...
Bu ve bunun gibi birçok işlem NAnt projeleri ile otomatize edilince kodda her değişiklik yapıldığında bu işlemlerin zahmetsizce yapılması sadece bir çift tıklamaya bakar hale gelecektir.

NAnt Projelerini nasıl çalıştırırım ? Yazdığınız NAnt projelerini en basitinden

NAnt.exe -buildfile:"MerhabaDunya.build"

komutu ile çalıştırabilirsiniz. Ben yazdığım her NAnt projesi için aşağıdakine benzer bir BAT dosyası oluşturup ilgili projenin içerisine ekliyorum.

Not : -t parametresi derleme işleminin .NET Framework’ün hangi versiyonu kullanılarak yapılması gerektiğini belirtiyor.

"E:\Programs\Programming\NAnt\bin\NAnt.exe"
-t:net-1.1
-buildfile:"E:\Works\Nant\NAntDemo\NAntDemo_1\MerhabaDunya.build"


Komut satırında NAnt projemiz.

Örnek 1. NAnt ile SQL Server’a veritabanı oluşturma Aşağıdaki NAnt projesinde dışarıdan vereceğimiz T-SQL dosyası öncelikle test sunucusu üzerinde kuruluyor. Eğer bir hata oluşmazsa senaryodaki uygulamamızın çalışacağı sunucuya kuruluyor. Bu projede yararlandığımız osql aracı SQL Server ile iletişim kurabileceğimiz bir komut satırı uygulamasıdır. Parametreleri ile ilgili daha fazla bilgiyi Books Online’dan yada MSDN’den alabilirsiniz.
Yazdığımız projeleri öncelikle bir test sunucusu üzerinde ne kadar doğru olduğunu test etmeden gerçek ortamda (production) denememeye çalışın.

<?xml version="1.0"?>
<project name="NAnt DB Projesi" default="deployDB">
    <property name="TestMachine.User" value="sa"/>
    <property name="TestMachine.Password" value="sifre"/>
    <property name="TestMachine.Machine" value="TEST_MAKINA_ADI"/>
    <property name="TestMachine.Database" value="master"/>
        
    <property name="ProductionMachine.User" value="sa"/>
    <property name="ProductionMachine.Password" value="sifre"/>
    <property name="ProductionMachine.Machine" value="TEST_MAKINA_ADI"/>
    <property name="ProductionMachine.Database" value="master"/>
    
    <property name="SQLFile" value="DBScripts\DBScripts.sql"/>
    
    <target name="deployDB">
        <call target="deployTestDB" failonerror="true"/> 
        <call target="deployProductionDB" failonerror="true"/> 
    </target>
    
    <target name="deployTestDB">
        <exec program="osql">
            <arg value="-U" /><arg value="${TestMachine.User}" />
            <arg value="-P" /><arg value="${TestMachine.Password}" />
            <arg value="-S" /><arg value="${TestMachine.Machine}" />
            <arg value="-d" /><arg value="${TestMachine.Database}" />
            <arg value="-i" /><arg value="${SQLFile}" />
        </exec>
    </target>
    
    <target name="deployProductionDB">
        <exec program="osql">
            <arg value="-U" /><arg value="${ProductionMachine.User}" />
            <arg value="-P" /><arg value="${ProductionMachine.Password}" />
            <arg value="-S" /><arg value="${ProductionMachine.Machine}" />
            <arg value="-d" /><arg value="${ProductionMachine.Database}" />
            <arg value="-i" /><arg value="${SQLFile}" />
        </exec>
    </target>
</project>

Örnek 2. Build sonuçlarının mail ile gönderilmesi Aşağıdaki örneğimizde ise NAnt öncelikle bir Sınıf Kütüphanesi (Class Library) projesini derleyip oluşan DLL’i web projemiz altına taşıyoruz. Daha sonra web projesini bu DLL’e referans vererek derliyoruz.

<?xml version="1.0"?>
<project name="NAnt Web Projesi" default="buildWeb">
    <property name="DLLBaseName" value="Library"/>
    <property name="WebPath" value="C:\Inetpub\wwwroot\NAntWebProject"/>
    <property name="WebBaseName" value="NAntWebProject"/>
    <property name="debug" value="true"/>
    
    <target name="deleteDLLs" description="Deletes Temporary DLLs.">
        <delete failonerror="false">
            <fileset>
                <include name="${DLLBaseName}.dll"/>
                <include name="${DLLBaseName}.pdb"/>
                <include name="${WebPath}\bin\${DLLBaseName}.dll"/>
                <include name="${WebPath}\bin\${DLLBaseName}.pdb"/>
            </fileset>
        </delete>
        <echo message="Delete DLLs." />
    </target>

    <target name="buildDLL" depends="deleteDLLs">
        <csc target="library" output="${DLLBaseName}.dll" debug="${debug}">
            <sources>
               <include name="C:\Inetpub\wwwroot\NAntWebProject\NAntDemoClassLibrary\*.cs"/>
            </sources>
        </csc>
        <echo message="${DLLBaseName}.dll built." />
    </target>
    
    <target name="moveDLLs" depends="buildDLL">
        <move failonerror="true" todir="${WebPath}\bin">
            <fileset>
                <include name="${DLLBaseName}.dll"/>
                <include name="${DLLBaseName}.pdb"/>
            </fileset>
        </move>
        <echo message="${DLLBaseName}.dll moved to ${WebPath}" />
    </target>
    
    <target name="buildWeb" depends="moveDLLs">
        <csc target="library" output="${WebPath}\bin\${WebBaseName}.dll" debug="${debug}">
            <sources>
               <include name="${WebPath}\*.cs"/>
            </sources>
            <references>
               <include name="${WebPath}\bin\${DLLBaseName}.dll"/>
           </references>
        </csc>
        <echo message="Web Project built." />
    </target>
</project>
Şimdi bu build projesini, aşağıdaki gibi exec görevini kullanarak NAnt ile çalıştırırsak ve build sonuçlarını loglar isek, bu dosyayı build sonucu olarak mail görevini kullanarak projeden sorumlu kişiye gönderebiliriz.

<?xml version="1.0"?>
<project name="Master Build" default="mailBuildResult">
    <property name="BaseDir" value="E:\Works\Nant\NAntDemo\NAntDemo_2"/>
    <property name="NAntDir" value="E:\Programs\Programming\NAnt\bin"/>

    <target name="BuildWebProject">
        <exec program="${NAntDir}\NAnt.exe" failonerror="false">
            <arg value="-l:${BaseDir}\Results.txt" />
            <arg value="-t:net-1.1" />
            <arg value="-buildfile:${BaseDir}\WebBuild.build" />
        </exec>
    </target>
    
    <target name="mailBuildResult" depends="BuildWebProject">
        <mail from="buildmaster"
            tolist="meersoy@csharpnedir.com"
            cclist=""
            subject="Build Sonuclari"
            message="Build Sonuclari"
            mailhost="mail.xyz.com">
            <attachments>
                <include name="${BaseDir}\Results.txt" />
            </attachments>
        </mail>
     </target>
</project>

Örnek 3. NAnt build projesine script ekleme Aşağıdaki örnekte ise NAnt projesi içerisine script görevini kullanarak script eklemeyi ele alıyoruz.
Aşağıda farkedeceğiniz ScriptMain(Project project) metodu sıradan bir metod değil. Bu metod dahil olduğu sınıf için başlangıç noktasıdır (entry point) ve Main() metodu ile aynı işi yapar. Yani ilk çalıştırılacak olan metoddur.
NOT : Scriptlerinizde string içerisinde de olsa Türkçe karakter kullanmamaya dikkat edin. Yada Xml dosyanıza Türkçe encoding ekleyin.

<?xml version="1.0"?>
<project name="NAnt ile Script Denemesi" default="ScriptDeneme">
    <target name="ScriptDeneme">
        <script language="C#" mainclass="ScriptClass">
            <code>
                <![CDATA[
                    class ScriptClass {
                        public static void ScriptMain(Project project) {
                            Console.WriteLine("Suan : " + DateTime.Now.ToString());
                        }
                    }
                ]]>
            </code>
        </script>
    </target>
</project>

Daha başka neler yapabilirim ?
  • <nunit> görevi ile NUnit Frameworkü kullanılarak testler çalıştırılır.
  • <ndoc> görevi ile NDoc kullanılarak proje dökümanı oluşturulur..
  • <vssget>, <vsscheckin> ve <vsscheckout> görevleri (task) ile Visual Source Safe entegrasyonu sağlayabiliriz.
  • <exec> görevi (task) ile istediğiniz uygulamayı çalıştırıp bu uygulamaya parametre geçebilirsiniz.
  • Platform bağımlı görevler NAntContrib kütüphanesinden erişilebilir. Örnek : <mkiisdir> - IIS’te sanal dizin oluşturur.
  • NAntContrib ile birlikte indirebileceğiniz SlingShot uygulamasını kullanarak VS.NET solution (*.sln) dosyanızı NAnt Build projesine dönüştürebilirsiniz. Ben denemelerimde hep hata ile karşılaştım. Ama referans kısımlarını elle ekleyerek build dosyalarını elde edebiliyorsunuz.
  • NAnt.exe’nin bulunduğu dizindeki NAnt.exe.config dosyasına property ekleyerek tüm NAnt projelerinin paylaşacağı global özellikler (property)tanımlayabilirsiniz. Ayrıca yine aynı dosya içerisindeki ayarları değiştirerek NAnt’ı dilediğiniz ayarda çalışmasını sağlayabilirsiniz.
Sonuç Build işleminin otomatize edilmesi, solution’daki proje sayısı arttıkça daha iyi anlaşılabilecek bir gereksinimdir. .NET araçlarını ve Frameworklerini inceleyeceğimiz serinin ilk bölümünde NAnt’ı incelemeye çalıştık. NAnt alanında tek araç değil. XML’e dayalı build dosyalarının önemini farkeden Microsoft, Visual Studio 2005 ile birlikte MSBuild adında bir build engine geliştirdi.

Makaledeki örnekleri indirmek için tıklayın.

Serinin bir sonraki bölümünde görüşmek üzere.

Kaynaklar ve Linkler
Makale:
NAnt ile Otomatik Build İşlemi Gerçekleştirme C#, Visual C# ve .NET Mustafa Erhan Ersoy
  • Yazılan Yorumlar
  • Yorum Yaz
EYL
3
2005
Bence bu alandaki en doyurucu türkçe makale, Mustafa beyin kalemine sağlık. Devam niteliğindeki diğer açık kaynak frameworkleride dört gözle bekliyoruz
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor