{"id":9416,"date":"2011-10-22T23:15:00","date_gmt":"2011-10-22T21:15:00","guid":{"rendered":"https:\/\/fatihboy.com\/post\/roslyn-ile-scripting"},"modified":"2011-10-22T23:15:00","modified_gmt":"2011-10-22T21:15:00","slug":"roslyn-ile-scripting","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/roslyn-ile-scripting\/","title":{"rendered":"Microsoft &#8220;Roslyn&#8221; CTP ile Scripting"},"content":{"rendered":"<p>&nbsp;&nbsp; <a href=\"\/en\/?p=9403\" target=\"_blank\" rel=\"noopener noreferrer\">Bir \u00f6nceki yaz\u0131mda<\/a> sizlere Microsoft \u201cRoslyn\u201d CTP\u2019sinin yay\u0131nland\u0131\u011f\u0131ndan bahsetmi\u015f ve dilim d\u00f6nd\u00fc\u011f\u00fcnce \u201cRoslyn\u201d\u2019in ne oldu\u011funu, neden \u00f6nemli oldu\u011funu ve hangi noktalarda i\u015fimize yaraca\u011f\u0131n\u0131 payla\u015fm\u0131\u015ft\u0131m. Bu yaz\u0131mda ise art\u0131k elimizi koda bula\u015ft\u0131rman\u0131n zaman\u0131 geldi diye d\u00fc\u015f\u00fcnerek Roslyn\u2019e giri\u015f yap\u0131yorum. Pek \u00e7ok farkl\u0131 noktada kullan\u0131labilece\u011finiz Roslyn CTP\u2019nin \u00f6ncelikli olarak g\u00f6rece daha kolay ve pek \u00e7ok yaz\u0131l\u0131m geli\u015ftirici a\u00e7\u0131s\u0131nda da daha s\u0131k kullan\u0131laca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcm betik (script) deste\u011fini anlataca\u011f\u0131m.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Pek \u00e7ok yaz\u0131l\u0131m geli\u015ftiricinin hayalidir 3.parti firmalar\/ki\u015filer taraf\u0131ndan geni\u015fletilebilecek uygulamalar yazmak. Pek \u00e7o\u011fumuz bunu interface\/abstract base class yard\u0131m\u0131yla sundu\u011fu API\u2019ler ve reflection yard\u0131m\u0131yla yapabilmekte; ama bu yakla\u015f\u0131m\u0131n ufak bir sorunu var: son kullan\u0131c\u0131 hi\u00e7 bir zaman i\u015fin i\u00e7inde olmuyor. Geli\u015ftirilecek eklentiler ancak 3.parti bir firma ya da konusunun ehli bir yaz\u0131l\u0131m geli\u015ftirici taraf\u0131ndan yaz\u0131labilmekte, derlenen assembly ise uygulama ba\u015flarken ya da ba\u015flad\u0131ktan sonraki bir zamanda aray\u00fczler \u00fczerinden y\u00fcklenmekte. Burada ka\u00e7\u0131r\u0131lan ya da desteklenmeyen nokta ise uygulamaya son kullan\u0131c\u0131n\u0131n da m\u00fcdahale etmek, ihtiya\u00e7lar do\u011frultusunda geni\u015fletmek isteyebilece\u011fi.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bir ofis uygulamas\u0131n\u0131n ele alal\u0131m, Visual Basic ile yaz\u0131lan bir macro sayesinde temel d\u00fczeyde makro bilgisine sahip \u201c<em>amat\u00f6r<\/em>\u201d yaz\u0131l\u0131mc\u0131lar bile harikalar yaratabilmekte, benzer durum Visual Studio i\u00e7in de ge\u00e7erli. Basit bir ka\u00e7 komut ve uygulaman\u0131n sundu\u011fu ortam sayesinde uygulamay\u0131 geli\u015ftirenlerin akl\u0131na gelmeyen \u00e7e\u015fitli senaryolar ortaya \u00e7\u0131kara harika makrolar yaz\u0131labilir. Roslyn CTP\u2019sinin bize sundu\u011fu ilk avantaj i\u015fte tam b\u00f6ylesi bir durumda kar\u015f\u0131m\u0131za \u00e7\u0131kmakta; scripting.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Roslyn ile birlikte sahip olaca\u011f\u0131m\u0131z script deste\u011fini a\u00e7\u0131klamak ad\u0131na olduk\u00e7a basit bir uygulama ile ba\u015flayal\u0131m isterseniz. \u00dczerinde sade bir textbox ve buton olan bir windows forms ekran\u0131;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/10\/RoslynScripting_AnaForm.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/10\/RoslynScripting_AnaForm_thumb.png\" alt=\"Roslyn ile scriptin denemelerimizi yapaca\u011f\u0131m\u0131z basit uygulamam\u0131z\u0131n ana ekran\u0131\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Bu basit uygulamam\u0131zdaki hedefimiz text alana girilen matematiksek ifadeleri \u201c\u00e7al\u0131\u015ft\u0131r\u201d butonuna bas\u0131ld\u0131\u011f\u0131nda i\u015fleterek sonucu kullan\u0131c\u0131ya g\u00f6stermek olsun. Uygulamam\u0131z\u0131n bu basit isterini inceledi\u011fimizde asl\u0131nda temel d\u00fczeyde verilen ve sadece d\u00f6rt i\u015flemle s\u0131n\u0131rl\u0131 olan bir beti\u011fin i\u015fletilmesi olarak g\u00f6rebiliriz.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Uygulamam\u0131z\u0131 geli\u015ftirmeye Roslyn scripting k\u00fct\u00fcphanelerini ekleyerek ba\u015flayal\u0131m. Roslyn CTP\u2019sinin kurulumu sonras\u0131nda, ihtiyac\u0131m\u0131z olan t\u00fcm k\u00fct\u00fcphaneler GAC\u2019da kay\u0131tl\u0131 olarak bulunacakt\u0131r. Eklememiz gereken k\u00fct\u00fcphaneler ise;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li> Roslyn.Compilers <\/li><li> Roslyn.Compilers.CSharp <\/li><\/ul>\n\n\n\n<p>&nbsp;&nbsp; Bu noktada belirmem laz\u0131m ki uygulamam\u0131n sadece C# scriptlerini destekledi\u011fi varsay\u0131m\u0131yla hareket ediyorum. Sizler geli\u015ftirdi\u011finiz uygulamalarda C# yerine\/yan\u0131nda Visual Basic ile script deste\u011fi sunmak isterseniz Roslyn.Compilers.VisualBasic referans\u0131n\u0131 eklemeniz gerekli olacakt\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Referanslar\u0131 ekledikten sonra uygulamam\u0131z\u0131n ana ekran\u0131ndaki \u00e7al\u0131\u015ft\u0131r butonunun click olay\u0131ndan \u00f6nce son kullan\u0131c\u0131n\u0131n yazaca\u011f\u0131 aritmetik ifadenin \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131 script motorunun ilklendirilmesi gerekli. Bunun i\u00e7in s\u0131n\u0131f\u0131m\u0131z i\u00e7erisinde bir de\u011fi\u015fken olu\u015fturmal\u0131y\u0131z;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">private ScriptEngine engine = new ScriptEngine();<\/pre>\n\n\n\n<p>&nbsp; Tabi referanslar\u0131 eklemek yukar\u0131daki kodu derlenmesi i\u00e7in tek ba\u015f\u0131na yeterli olmayacakt\u0131r. Derleyici bizden <strong>ScriptEngine<\/strong> s\u0131n\u0131f\u0131n\u0131n nerede bulundu\u011funu belirtmemizi isteyecektir. Bunun i\u00e7in a\u015fa\u011f\u0131daki using sat\u0131r\u0131n\u0131 da eklemelisiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using Roslyn.Scripting.CSharp;<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Hemen ard\u0131ndan da kullan\u0131c\u0131n\u0131n textbox\u2019a yazd\u0131\u011f\u0131 ifadeyi \u00e7al\u0131\u015ft\u0131ral\u0131m;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var sonuc = engine.Execute&lt;long>(betikIcerigi.Text);<\/pre>\n\n\n\n<p>&nbsp; Bu kadar kolay\u2026 Burada kullan\u0131c\u0131n\u0131n her zaman i\u00e7in sonucu long olan bir ifade girdi\u011fi varsay\u0131m\u0131yla hareket etti\u011fim i\u00e7in script motorumuza \u00e7al\u0131\u015fmas\u0131n\u0131 s\u00f6ylerken sonucu long olarak istedi\u011fimi de belirtmeyi ihmal etmiyorum. Bu sayede gereksiz bir cast i\u015fleminden kurtulmu\u015f oluyorum. Son olarak da i\u015flemin sonucunu kullan\u0131c\u0131m\u0131za g\u00f6sterelim;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">MessageBox.Show(\"Yap\u0131lan i\u015flem sonucu : \" + sonuc);<\/pre>\n\n\n\n<p>&nbsp; Bu \u00fc\u00e7 sat\u0131rl\u0131k kodu butonumuzun click fonksiyonu i\u00e7erisine yazarak uygulamam\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda&nbsp; (1+3)*(9-2*2) gibi bir matematiksel i\u015flem i\u00e7in 20 sonucunu verdi\u011fini a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde g\u00f6rebiliriz;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/10\/islemSonucu.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/10\/islemSonucu_thumb.png\" alt=\"islemSonucu\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Bu basit matematiksel i\u015flemlere bakarak yapabileceklerimizin sadece bunlar oldu\u011funu kesinlikle d\u00fc\u015f\u00fcnmeyin, unutmay\u0131n elimizin alt\u0131nda C# var! \u00d6rne\u011fin a\u015fa\u011f\u0131daki gibi basit bir script yazarak \u00f6zyenilemeli (recursive) olarak fakt\u00f6riyel hesab\u0131n\u0131 kolayl\u0131kla yapabiliriz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">long faktoriyel(int n) {\n    if(n==1) { return 1; }\n\n    return faktoryel(n-1) * n;\n }\n\nfaktoryel(5);<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/10\/RoslynScripting_Faktoriyel.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/10\/RoslynScripting_Faktoriyel_thumb.png\" alt=\"Roslyn'in sundu\u011fu C# deste\u011fi sayesinde uygulamalar\u0131m\u0131zda g\u00fc\u00e7l\u00fc bir scipt deste\u011fi sunabiliriz\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Yukar\u0131daki iki \u00f6rnekte ScriptEngine\u2019e string t\u00fcr\u00fcnde bir i\u00e7erik sunmakla birlikte <strong>ExecuteFile<\/strong> fonksiyonunu kullanarak istersek dosya sisteminde bulunan bir script\u2019i \u00e7al\u0131\u015ft\u0131rmam\u0131z da m\u00fcmk\u00fcn.<\/p>\n\n\n\n<p>&nbsp; G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi Roslyn CTP ile uygulamam\u0131z\u0131 iki sat\u0131rl\u0131k basit bir kod yard\u0131m\u0131yla script deste\u011fi sunar hale getirebiliyoruz; fakat ger\u00e7ek hayatta uygulamalar\u0131m\u0131z bu \u00f6rneklerden \u00e7ok daha karma\u015f\u0131k isterlerle kar\u015f\u0131m\u0131za \u00e7\u0131kacakt\u0131r.\u00d6rneklerimizde dikkat ederseniz scripti \u00e7al\u0131\u015ft\u0131ran host uygulamayla ya da bir \u00f6nceki \u00e7al\u0131\u015ft\u0131r\u0131lan script ile herhangi bir etkile\u015fim bulunmamakta; ama ger\u00e7ek hayattaki pek \u00e7ok senaryo i\u00e7in b\u00f6ylesi bir ister ka\u00e7\u0131n\u0131lmaz olarak kar\u015f\u0131m\u0131za \u00e7\u0131kacakt\u0131r. \u015eansl\u0131y\u0131z ki Roslyn geli\u015ftiricileri b\u00f6ylesi senaryolar\u0131 da unutmam\u0131\u015flar ve birden fazla farkl\u0131 \u00e7al\u0131\u015ft\u0131rma aras\u0131nda verilerin iletilebilmesi i\u00e7in oturum mant\u0131\u011f\u0131n\u0131 kullanm\u0131\u015flar.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Fabrika paterni ile tasarlanm\u0131\u015f olan Session nesnesinin bir \u00f6rne\u011fini alabilmek i\u00e7in <strong>Create<\/strong> fonksiyonu kullan\u0131labilir. Devam\u0131nda ayn\u0131 oturum i\u00e7erisinde \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 istedi\u011fimiz her bir script i\u00e7in ScriptEngine\u2019in Execute fonksiyonuna kullan\u0131lacak oturum nesnesi ge\u00e7ilmesi yeterli olacakt\u0131r.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">private ScriptEngine engine = new ScriptEngine();\nprivate Session oturum = Session.Create();\n\n\/\/...\n\nprivate void calistir_Click(object sender, EventArgs e) {\n    var sonuc = engine.Execute&amp;lt;long&amp;gt;(betikIcerigi.Text, oturum);\n\n    MessageBox.Show(\"Yap\u0131lan i\u015flem sonucu : \" + sonuc);\n\n}<\/pre>\n\n\n\n<p>&nbsp; Kodumuzu yukar\u0131daki \u015fekilde d\u00fczenledikten sonra a\u015fa\u011f\u0131daki iki script\u2019i arka arkaya \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda ikinci script\u2019in sorunsuz olarak \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve 8 sonucunu verdi\u011fini g\u00f6rebilirsiniz.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">int x = 3;<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">x + 5;<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Script host eden uygulama ile etkile\u015fim i\u00e7in yine Session nesnesinin Create fonksiyonu kullan\u0131labilir. Bu fonksiyonun host nesneyi parametre kabul eden overload\u2019\u0131 yard\u0131m\u0131yla istedi\u011fimiz etkile\u015fim s\u0131n\u0131f\u0131n\u0131 script kullan\u0131m\u0131na sunabiliriz. Bu noktada sizlere tavsiyem t\u00fcm uygulaman\u0131za ya da formunuza do\u011frudan eri\u015fim vermemeniz, bunun yerine g\u00fcvenlik ad\u0131na s\u0131n\u0131rlar\u0131n\u0131z\u0131 sizin \u00e7izdi\u011finiz bir ara s\u0131n\u0131f olu\u015fturup vermeniz. Bu sayede script\u2019lerin neler yap\u0131p neler yapamayaca\u011f\u0131n\u0131 daha netle\u015ftirmi\u015f olursunuz. \u00d6rnek vermek gerekirse, a\u015fa\u011f\u0131daki kod script\u2019lere uygulaman\u0131z\u0131n ana penceresinin ba\u015fl\u0131\u011f\u0131n\u0131 de\u011fi\u015ftirebilme imkan\u0131 sa\u011flarken formun tam\u0131na eri\u015femeyecekleri i\u00e7in ayn\u0131 zamanda uygulaman\u0131z\u0131 koruyacakt\u0131r;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">namespace Com.Enterprisecoding.Roslyn.ScriptingDemo {\n    public partial class AnaEkran : Form {\n        private ScriptEngine engine;\n        private Session oturum;\n        private HostEtkilesim hostEtkilesim;\n\n        public AnaEkran() {\n            InitializeComponent();\n\n            engine = new ScriptEngine();\n            hostEtkilesim = new HostEtkilesim(this);\n            oturum = Session.Create(hostEtkilesim);\n        }\n\n        private void calistir_Click(object sender, EventArgs e) {\n            engine.Execute(betikIcerigi.Text, oturum);\n        }\n    }\n\n    public class HostEtkilesim {\n        private Form anaEkran;\n\n        public HostEtkilesim(Form anaEkran) {\n            this.anaEkran = anaEkran;\n        }\n\n        public void UygulamaBasliginiDegistir(string yeniBaslik) {\n            anaEkran.Text = yeniBaslik;\n        }\n    }\n}<\/pre>\n\n\n\n<p>&nbsp; Kodumuzu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda HostEtkile\u015fim i\u00e7inde tan\u0131ml\u0131 olan t\u00fcm fonksiyonlar script\u2019imiz i\u00e7erisinde kullan\u0131labiliyor olacakt\u0131r. Burada dikkat edilmesi gereken fonksiyonlar\u0131n script i\u00e7erisinde kullan\u0131lmas\u0131 s\u0131ras\u0131nda a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde de oldu\u011fu gibi do\u011frudan fonksiyon ad\u0131n\u0131n verilmesidir.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/10\/HostNesneFonksiyonu.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/10\/HostNesneFonksiyonu_thumb.png\" alt=\"HostNesneFonksiyonu\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Benzer yakla\u015f\u0131klar\u0131 kullanarak sizde kendi uygulamalar\u0131n\u0131za olduk\u00e7a kolay \u015fekilde script deste\u011fi sunabilirsiniz.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Son olarak sizleri uyarmam gereken bir nokta daha bulunuyor; ScriptEngine\u2019in Execute fonksiyonu her \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015fan script i\u00e7in ge\u00e7ici bir assembly olu\u015fturularak uygulama taraf\u0131ndan y\u00fcklenecektir. Bu durumda uzun soluklu \u00e7al\u0131\u015fan uygulamalarda \u00e7ok fazla script \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 halinde bir problem olu\u015fturacakt\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/10\/roslyn_yukluAssemblyler.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/10\/roslyn_yukluAssemblyler_thumb.png\" alt=\"Haf\u0131zada y\u00fckl\u00fc kalan assembly'ler\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Bu durum .net framework\u2019\u00fcn bir application domain\u2019de y\u00fcklenen assembly\u2019leri sadece bu application domain sonland\u0131\u011f\u0131nda kald\u0131r\u0131yor olmas\u0131 kaynakl\u0131d\u0131r. Bu durumu d\u00fczeltmek ad\u0131na scriptler ayr\u0131 bir application domain i\u00e7erisinde \u00e7al\u0131\u015ft\u0131r\u0131larak i\u015fleri bitince bu ayr\u0131 application domain sonland\u0131r\u0131labilir.<\/p>","protected":false},"excerpt":{"rendered":"<p>&nbsp;&nbsp; Bir \u00f6nceki yaz\u0131mda sizlere Microsoft \u201cRoslyn\u201d CTP\u2019sinin yay\u0131nland\u0131\u011f\u0131ndan bahsetmi\u015f ve dilim d\u00f6nd\u00fc\u011f\u00fcnce \u201cRoslyn\u201d\u2019in ne oldu\u011funu, neden \u00f6nemli oldu\u011funu ve hangi noktalarda i\u015fimize yaraca\u011f\u0131n\u0131 payla\u015fm\u0131\u015ft\u0131m. Bu yaz\u0131mda ise art\u0131k elimizi koda bula\u015ft\u0131rman\u0131n zaman\u0131 geldi diye d\u00fc\u015f\u00fcnerek Roslyn\u2019e giri\u015f yap\u0131yorum. Pek \u00e7ok farkl\u0131 noktada kullan\u0131labilece\u011finiz Roslyn CTP\u2019nin \u00f6ncelikli olarak g\u00f6rece daha kolay ve pek \u00e7ok yaz\u0131l\u0131m&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/roslyn-ile-scripting\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":16617,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77,28],"tags":[137,138],"class_list":["post-9416","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-csharp","category-turkce","tag-roslyn","tag-scripting"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Microsoft &quot;Roslyn&quot; CTP ile Scripting - Fatih Boy<\/title>\n<meta name=\"description\" content=\"Microsoft &quot;Roslyn&quot; projesi Community Technology Preview (CTP) ile uygulamalar\u0131n\u0131za nas\u0131l scripting deste\u011fi verebilece\u011finize dair detaylar\u0131 bulabilirsiniz.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihboy.com\/en\/roslyn-ile-scripting\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Microsoft &quot;Roslyn&quot; CTP ile Scripting - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"Microsoft &quot;Roslyn&quot; projesi Community Technology Preview (CTP) ile uygulamalar\u0131n\u0131za nas\u0131l scripting deste\u011fi verebilece\u011finize dair detaylar\u0131 bulabilirsiniz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/roslyn-ile-scripting\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2011-10-22T21:15:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2020\/02\/AssemblyLine.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1023\" \/>\n\t<meta property=\"og:image:height\" content=\"405\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Fatih Boy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Boy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/roslyn-ile-scripting\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"Microsoft &#8220;Roslyn&#8221; CTP ile Scripting\",\"datePublished\":\"2011-10-22T21:15:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/roslyn-ile-scripting\/\"},\"wordCount\":1341,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2020\/02\/AssemblyLine.jpg\",\"keywords\":[\"Roslyn\",\"Scripting\"],\"articleSection\":[\"C#\",\"T\u00fcrk\u00e7e\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/roslyn-ile-scripting\/\",\"url\":\"https:\/\/fatihboy.com\/roslyn-ile-scripting\/\",\"name\":\"Microsoft \\\"Roslyn\\\" CTP ile Scripting - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2020\/02\/AssemblyLine.jpg\",\"datePublished\":\"2011-10-22T21:15:00+00:00\",\"description\":\"Microsoft \\\"Roslyn\\\" projesi Community Technology Preview (CTP) ile uygulamalar\u0131n\u0131za nas\u0131l scripting deste\u011fi verebilece\u011finize dair detaylar\u0131 bulabilirsiniz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/roslyn-ile-scripting\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2020\/02\/AssemblyLine.jpg\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2020\/02\/AssemblyLine.jpg\",\"width\":1023,\"height\":405},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microsoft &#8220;Roslyn&#8221; CTP ile Scripting\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihboy.com\/#website\",\"url\":\"https:\/\/fatihboy.com\/\",\"name\":\"Fatih Boy\",\"description\":\"Ki\u015fisel Web Sitesi\",\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihboy.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\",\"name\":\"Fatih Boy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"caption\":\"Fatih Boy\"},\"logo\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/fatihboy.com\"],\"url\":\"https:\/\/fatihboy.com\/en\/author\/fatih\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Microsoft \"Roslyn\" CTP ile Scripting - Fatih Boy","description":"Microsoft \"Roslyn\" projesi Community Technology Preview (CTP) ile uygulamalar\u0131n\u0131za nas\u0131l scripting deste\u011fi verebilece\u011finize dair detaylar\u0131 bulabilirsiniz.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihboy.com\/en\/roslyn-ile-scripting\/","og_locale":"en_US","og_type":"article","og_title":"Microsoft \"Roslyn\" CTP ile Scripting - Fatih Boy","og_description":"Microsoft \"Roslyn\" projesi Community Technology Preview (CTP) ile uygulamalar\u0131n\u0131za nas\u0131l scripting deste\u011fi verebilece\u011finize dair detaylar\u0131 bulabilirsiniz.","og_url":"https:\/\/fatihboy.com\/en\/roslyn-ile-scripting\/","og_site_name":"Fatih Boy","article_published_time":"2011-10-22T21:15:00+00:00","og_image":[{"width":1023,"height":405,"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2020\/02\/AssemblyLine.jpg","type":"image\/jpeg"}],"author":"Fatih Boy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatih Boy","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/roslyn-ile-scripting\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"Microsoft &#8220;Roslyn&#8221; CTP ile Scripting","datePublished":"2011-10-22T21:15:00+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/roslyn-ile-scripting\/"},"wordCount":1341,"commentCount":4,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2020\/02\/AssemblyLine.jpg","keywords":["Roslyn","Scripting"],"articleSection":["C#","T\u00fcrk\u00e7e"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/roslyn-ile-scripting\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/roslyn-ile-scripting\/","url":"https:\/\/fatihboy.com\/roslyn-ile-scripting\/","name":"Microsoft \"Roslyn\" CTP ile Scripting - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2020\/02\/AssemblyLine.jpg","datePublished":"2011-10-22T21:15:00+00:00","description":"Microsoft \"Roslyn\" projesi Community Technology Preview (CTP) ile uygulamalar\u0131n\u0131za nas\u0131l scripting deste\u011fi verebilece\u011finize dair detaylar\u0131 bulabilirsiniz.","breadcrumb":{"@id":"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/roslyn-ile-scripting\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2020\/02\/AssemblyLine.jpg","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2020\/02\/AssemblyLine.jpg","width":1023,"height":405},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/roslyn-ile-scripting\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"Microsoft &#8220;Roslyn&#8221; CTP ile Scripting"}]},{"@type":"WebSite","@id":"https:\/\/fatihboy.com\/#website","url":"https:\/\/fatihboy.com\/","name":"Fatih Boy","description":"Ki\u015fisel Web Sitesi","publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihboy.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158","name":"Fatih Boy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","caption":"Fatih Boy"},"logo":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/fatihboy.com"],"url":"https:\/\/fatihboy.com\/en\/author\/fatih\/"}]}},"brizy_media":[],"_links":{"self":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/9416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/comments?post=9416"}],"version-history":[{"count":0,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/9416\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media\/16617"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=9416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=9416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=9416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}