<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-435012038632500425</atom:id><lastBuildDate>Sun, 22 Jun 2025 01:23:54 +0000</lastBuildDate><category>C#</category><category>Microsoft.Net Asp.Net Core</category><category>Alper Konuralp</category><category>Microsoft.Net Core</category><category>OData</category><category>OData Server</category><category>OData WebApi</category><category>Entity Framework Core</category><category>Typescript</category><category>Microsoft</category><category>Ubuntu</category><category>Vue.js</category><category>Java</category><category>MongoDB</category><category>Vuetify</category><category>Java vs C#</category><category>Jest Typescript Unit Test</category><category>MongoDB Kurulum</category><category>NoSql</category><category>Unit Test</category><category>WPF</category><category>select2</category><category>.Net</category><category>Bilgisayar</category><category>Castle Windsor</category><category>Derin Anlam İçerenler</category><category>Dynamic Controllers</category><category>GitHub</category><category>HTTP PATCH</category><category>Jest</category><category>Log4net</category><category>MS.Net Framework</category><category>NHibernate</category><category>Project OData Server</category><category>Yazılım Geliştirme</category><category>.Net 8</category><category>AI</category><category>Active Directory</category><category>Ado.Net</category><category>Amazon Q Developer</category><category>Asp.Net</category><category>Asp.Net Core Docker Alpine Linux</category><category>Asp.Net Identity</category><category>Azure Cosmos DB</category><category>Azure Cosmos DB Emulator</category><category>Bebek Sağlığı</category><category>Castle Logging Facility</category><category>ChatGPT</category><category>Ders Demoları</category><category>Docker</category><category>Docker Alpine Linux</category><category>Entity Framework Core TPH</category><category>Evernote</category><category>FireQuery</category><category>Firebug</category><category>Firefox</category><category>Frontend Development</category><category>Genel</category><category>Git</category><category>GitCredentialWinStore</category><category>Gülmece</category><category>HQL</category><category>HTTP DELETE</category><category>HTTP POST</category><category>HTTP PUT</category><category>Hayatın İçinden</category><category>Hibernate</category><category>Hrml DOM</category><category>JDeveloper</category><category>Llama3.1</category><category>MS Entity Framework</category><category>Microsoft.Extensions.Logging</category><category>Multi-Threading</category><category>Obfuscations</category><category>Oracle</category><category>PLSql</category><category>Pidgin</category><category>Qwen2.5-coder</category><category>Sqlite</category><category>StarCoder2</category><category>TPH</category><category>Table per Hierarchy</category><category>Ubuntu 14.10</category><category>Unit Tests for Events</category><category>VB.Net</category><category>Vpn</category><category>Web Service</category><category>Windows 10</category><category>Wine</category><category>Yapay Zeka</category><category>git-credential-winstore.exe</category><category>mount</category><category>network</category><category>php</category><category>shalowMount</category><title>Alper&#39;in Yazılım Durağı</title><description>Yazılım Hayatım ve bu konudaki paylaşımlarım.</description><link>http://www.alperkonuralp.com/</link><managingEditor>noreply@blogger.com (Alper Konuralp)</managingEditor><generator>Blogger</generator><openSearch:totalResults>65</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-141896522769150590</guid><pubDate>Thu, 24 Oct 2024 13:59:00 +0000</pubDate><atom:updated>2024-10-24T16:59:09.017+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.Net</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Yazılım Geliştirme</category><title>.NET CLI Eklentisi Geliştirme: Kendi Komut Satırı Aracınızı Yazın</title><description>&lt;p&gt;&lt;code&gt;.NET CLI&lt;/code&gt; için kendi özel eklentinizi (plugin) geliştirmek, düşündüğünüzden daha kolaydır ve yazılım projelerinize esneklik kazandırır. CLI eklentileri, sık tekrarlanan görevleri otomatikleştirmek veya projelerinizi hızlandıracak özel komutlar oluşturmak için harika bir yoldur. Böylece, kendi iş akışınıza uygun araçlar geliştirip komut satırından rahatça kullanabilirsiniz.  &lt;/p&gt;
&lt;p&gt;Bu yazıda, sıfırdan bir .NET CLI aracı geliştirmenin tüm adımlarını birlikte inceleyeceğiz. Eklentinizi nasıl yapılandıracağınızı, paketleyeceğinizi ve ister lokal ister NuGet üzerinden dağıtabileceğinizi adım adım anlatacağım. Hazırsanız başlayalım!&lt;/p&gt;
&lt;h3 id=&quot;1-proje-olu-turma&quot;&gt;1. Proje Oluşturma&lt;/h3&gt;
&lt;p&gt;İlk adım olarak, CLI eklentinizin temeli olacak bir &lt;strong&gt;.NET Console Application&lt;/strong&gt; projesi oluşturmanız gerekiyor. Bu konsol uygulaması, komut satırından çağrıldığında çalışacak ve sizin tanımladığınız komutlara göre işlem yapacaktır. &lt;/p&gt;
&lt;p&gt;Proje oluşturmak için aşağıdaki komutu terminalde (Command Prompt, PowerShell veya Bash) çalıştırın:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;dotnet &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;console&lt;/span&gt; -n MyDotNetPlugin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu komut şu işlemleri yapar:  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;dotnet new console&lt;/code&gt;&lt;/strong&gt;: Yeni bir konsol uygulaması oluşturur.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-n MyDotNetPlugin&lt;/code&gt;&lt;/strong&gt;: Uygulamanın adını &lt;code&gt;MyDotNetPlugin&lt;/code&gt; olarak belirler. Bu adı istediğiniz gibi değiştirebilirsiniz.  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Komut çalıştıktan sonra, bulunduğunuz dizine bir &lt;code&gt;MyDotNetPlugin&lt;/code&gt; klasörü oluşturulur ve proje dosyaları (örneğin &lt;code&gt;Program.cs&lt;/code&gt; ve &lt;code&gt;MyDotNetPlugin.csproj&lt;/code&gt;) buraya yerleştirilir. &lt;/p&gt;
&lt;h3 id=&quot;proje-klas-r-ne-girme&quot;&gt;Proje Klasörüne Girme&lt;/h3&gt;
&lt;p&gt;Projeyi oluşturduktan sonra terminalde proje klasörüne geçiş yaparak orada çalışmaya devam etmelisiniz:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;cd&lt;/span&gt; MyDotNetPlugin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu aşamadan sonra, projenizin dosyalarını düzenlemeye başlayabilir ve CLI eklentisi olarak çalışması için gerekli ayarları yapabilirsiniz. Artık kodunuzu yazmak ve projenizi bir CLI aracı olarak paketlemek için hazırsınız.&lt;/p&gt;
&lt;h3 id=&quot;2-proje-yap-s-n-ayarlay-n&quot;&gt;2. Proje Yapısını Ayarlayın&lt;/h3&gt;
&lt;p&gt;Projenizi bir &lt;code&gt;.NET CLI&lt;/code&gt; aracı (tool) olarak çalıştırabilmek için bazı ek yapılandırmalar yapmanız gerekiyor. Özellikle, projenizin bir konsol uygulamasından farkını belirlemek ve CLI komutu olarak paketlenmesini sağlamak için &lt;code&gt;*.csproj&lt;/code&gt; dosyasına birkaç önemli ayar eklemelisiniz. Bu adım, eklentinizin komut satırında doğru şekilde tanınması için kritik önem taşır. &lt;/p&gt;
&lt;p&gt;Öncelikle proje dizininizdeki &lt;strong&gt;&lt;code&gt;MyDotNetPlugin.csproj&lt;/code&gt;&lt;/strong&gt; dosyasını açın. İçeriğini aşağıdaki gibi düzenleyin:&lt;/p&gt;
&lt;h4 id=&quot;-mydotnetplugin-csproj-&quot;&gt;&lt;strong&gt;MyDotNetPlugin.csproj:&lt;/strong&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;lang-xml&quot;&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;Project&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;Sdk&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot;&gt;&quot;Microsoft.NET.Sdk&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;

  &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;PropertyGroup&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;OutputType&lt;/span&gt;&amp;gt;&lt;/span&gt;Exe&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;OutputType&lt;/span&gt;&amp;gt;&lt;/span&gt;  &lt;span class=&quot;hljs-comment&quot;&gt;&amp;lt;!-- Çıkış türü bir çalıştırılabilir dosya olacak --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;TargetFramework&lt;/span&gt;&amp;gt;&lt;/span&gt;net8.0&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;TargetFramework&lt;/span&gt;&amp;gt;&lt;/span&gt;  &lt;span class=&quot;hljs-comment&quot;&gt;&amp;lt;!-- .NET sürümünü belirtiyoruz --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;PackAsTool&lt;/span&gt;&amp;gt;&lt;/span&gt;true&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;PackAsTool&lt;/span&gt;&amp;gt;&lt;/span&gt;  &lt;span class=&quot;hljs-comment&quot;&gt;&amp;lt;!-- Projenin CLI aracı olarak paketlenmesini sağlar --&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;ToolCommandName&lt;/span&gt;&amp;gt;&lt;/span&gt;mytool&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;ToolCommandName&lt;/span&gt;&amp;gt;&lt;/span&gt;  &lt;span class=&quot;hljs-comment&quot;&gt;&amp;lt;!-- Komut satırında çalışacak komutun adı --&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;PropertyGroup&lt;/span&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;Project&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;-bu-yap-land-rmalar-ne-anlama-geliyor-&quot;&gt;&lt;strong&gt;Bu Yapılandırmalar Ne Anlama Geliyor?&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;OutputType&amp;gt;Exe&amp;lt;/OutputType&amp;gt;&lt;/code&gt;&lt;/strong&gt;: Bu ayar, projenizin bir çalıştırılabilir uygulama (&lt;code&gt;.exe&lt;/code&gt; veya ilgili platforma uygun format) olarak paketleneceğini belirtir. Eklentiniz, komut satırında bir komut olarak çalıştırılacak bir uygulama olacağı için bu gerekli.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;TargetFramework&amp;gt;net8.0&amp;lt;/TargetFramework&amp;gt;&lt;/code&gt;&lt;/strong&gt;: Bu satır, projenizin hangi .NET sürümünü kullanacağını tanımlar. En güncel sürümü kullanmak en iyisidir, ancak hedef platformunuza uygun farklı sürümler (örneğin &lt;code&gt;net6.0&lt;/code&gt; veya &lt;code&gt;net7.0&lt;/code&gt;) da belirtebilirsiniz.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;PackAsTool&amp;gt;true&amp;lt;/PackAsTool&amp;gt;&lt;/code&gt;&lt;/strong&gt;: Bu ayar, projenin bir CLI aracı (tool) olarak paketlenmesini sağlar. Eğer bu ayar yoksa, &lt;code&gt;dotnet&lt;/code&gt; komutuyla aracı paketleyemezsiniz.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;ToolCommandName&amp;gt;mytool&amp;lt;/ToolCommandName&amp;gt;&lt;/code&gt;&lt;/strong&gt;: Bu, projenizin komut satırında hangi isimle çalıştırılacağını belirler. Örneğin, bu ayarda &lt;code&gt;mytool&lt;/code&gt; olarak belirttiğimiz için komut satırında aracı çalıştırmak için şunu kullanacağız:  &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;mytool&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-proje-yap-s-n-test-etme-&quot;&gt;&lt;strong&gt;Proje Yapısını Test Etme&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Yapılandırmayı tamamladıktan sonra, projede kodlama yapmadan önce yapılandırmanın doğru çalışıp çalışmadığını test edebilirsiniz. Önce, aşağıdaki komutla projenin derlenip derlenmediğini kontrol edin:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;dotnet build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Herhangi bir hata görmüyorsanız, CLI eklentisi olarak paketleme ve dağıtım için gerekli tüm ayarları başarıyla tamamladınız. Şimdi sıradaki adımda &lt;code&gt;Program.cs&lt;/code&gt; dosyasına komutlarınızı ekleyip projenizi paketlemeye geçebiliriz.&lt;/p&gt;
&lt;h3 id=&quot;3-kodunuzu-yaz-n&quot;&gt;3. Kodunuzu Yazın&lt;/h3&gt;
&lt;p&gt;Artık projenizin kalbini oluşturacak kodu yazmaya başlayabilirsiniz. Eklentinizin davranışını tanımlayan kodlar, &lt;code&gt;Program.cs&lt;/code&gt; dosyasında bulunur. Bu kod, kullanıcı komutu çalıştırdığında tetiklenir ve gerekli işlemleri yapar. Aşağıda, basit bir CLI aracının nasıl çalışacağını ve genişletilebileceğini adım adım inceleyelim.  &lt;/p&gt;
&lt;h4 id=&quot;-program-cs-dosyas-n-n-yap-s-&quot;&gt;&lt;strong&gt;Program.cs Dosyasının Yapısı&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Öncelikle proje dizininizdeki &lt;strong&gt;&lt;code&gt;Program.cs&lt;/code&gt;&lt;/strong&gt; dosyasını açın. Varsayılan olarak içinde &lt;code&gt;Hello, World!&lt;/code&gt; yazan bir kod görürsünüz. Bunu aşağıdaki gibi değiştirin:&lt;/p&gt;
&lt;h4 id=&quot;-program-cs-&quot;&gt;&lt;strong&gt;Program.cs:&lt;/strong&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; System;

&lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; Program
{
    &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; Main(&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt;[] args)
    {
        &lt;span class=&quot;hljs-built_in&quot;&gt;if&lt;/span&gt; (args.Length == &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;)
        {
            &lt;span class=&quot;hljs-built_in&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Kullanım: mytool &amp;lt;komut&amp;gt; [parametreler]&quot;&lt;/span&gt;);
            &lt;span class=&quot;hljs-built_in&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Örnek: mytool merhaba&quot;&lt;/span&gt;);
        }
        &lt;span class=&quot;hljs-built_in&quot;&gt;else&lt;/span&gt;
        {
            &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; command = args[&lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;].ToLower();

            &lt;span class=&quot;hljs-built_in&quot;&gt;switch&lt;/span&gt; (command)
            {
                &lt;span class=&quot;hljs-built_in&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;merhaba&quot;&lt;/span&gt;:
                    &lt;span class=&quot;hljs-built_in&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Merhaba, dünya!&quot;&lt;/span&gt;);
                    &lt;span class=&quot;hljs-built_in&quot;&gt;break&lt;/span&gt;;
                &lt;span class=&quot;hljs-built_in&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;zaman&quot;&lt;/span&gt;:
                    &lt;span class=&quot;hljs-built_in&quot;&gt;Console&lt;/span&gt;.WriteLine($&lt;span class=&quot;hljs-string&quot;&gt;&quot;Şu anki saat: {DateTime.Now}&quot;&lt;/span&gt;);
                    &lt;span class=&quot;hljs-built_in&quot;&gt;break&lt;/span&gt;;
                &lt;span class=&quot;hljs-built_in&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;topla&quot;&lt;/span&gt;:
                    &lt;span class=&quot;hljs-built_in&quot;&gt;if&lt;/span&gt; (args.Length == &lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt;.TryParse(args[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;], out &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; a) &amp;amp;&amp;amp; &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt;.TryParse(args[&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;], out &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; b))
                    {
                        &lt;span class=&quot;hljs-built_in&quot;&gt;Console&lt;/span&gt;.WriteLine($&lt;span class=&quot;hljs-string&quot;&gt;&quot;Sonuç: {a + b}&quot;&lt;/span&gt;);
                    }
                    &lt;span class=&quot;hljs-built_in&quot;&gt;else&lt;/span&gt;
                    {
                        &lt;span class=&quot;hljs-built_in&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Kullanım: mytool topla &amp;lt;sayı1&amp;gt; &amp;lt;sayı2&amp;gt;&quot;&lt;/span&gt;);
                    }
                    &lt;span class=&quot;hljs-built_in&quot;&gt;break&lt;/span&gt;;
                &lt;span class=&quot;hljs-built_in&quot;&gt;default&lt;/span&gt;:
                    &lt;span class=&quot;hljs-built_in&quot;&gt;Console&lt;/span&gt;.WriteLine($&lt;span class=&quot;hljs-string&quot;&gt;&quot;Bilinmeyen komut: {command}&quot;&lt;/span&gt;);
                    &lt;span class=&quot;hljs-built_in&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Kullanılabilir komutlar: merhaba, zaman, topla&quot;&lt;/span&gt;);
                    &lt;span class=&quot;hljs-built_in&quot;&gt;break&lt;/span&gt;;
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;-kod-a-klamas-&quot;&gt;&lt;strong&gt;Kod Açıklaması&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;args&lt;/code&gt; Parametresi:&lt;/strong&gt;&lt;br&gt;&lt;code&gt;Main&lt;/code&gt; metoduna gelen &lt;code&gt;args&lt;/code&gt; dizisi, komut satırında verilen argümanları tutar. Örneğin, komut satırında &lt;code&gt;mytool merhaba&lt;/code&gt; yazarsanız, &lt;code&gt;args[0]&lt;/code&gt; değeri &lt;code&gt;&amp;quot;merhaba&amp;quot;&lt;/code&gt; olur.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Komutların İşlenmesi:&lt;/strong&gt;&lt;br&gt;İlk olarak &lt;code&gt;args&lt;/code&gt; dizisinin uzunluğu kontrol edilir. Eğer kullanıcı herhangi bir komut vermezse, bir kullanım talimatı görüntülenir.  &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;switch&lt;/code&gt; Yapısı ile Komut Yönlendirme:&lt;/strong&gt;&lt;br&gt;Kullanıcının verdiği komuta göre, &lt;code&gt;switch&lt;/code&gt; yapısı kullanılarak ilgili işlem yapılır:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;merhaba&lt;/code&gt; Komutu:&lt;/strong&gt; &amp;quot;Merhaba, dünya!&amp;quot; mesajını ekrana yazdırır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;zaman&lt;/code&gt; Komutu:&lt;/strong&gt; Sistemin güncel saatini gösterir.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;topla&lt;/code&gt; Komutu:&lt;/strong&gt; Kullanıcıdan iki sayı alır ve toplamını ekrana yazdırır. Sayılar doğru girilmezse bir hata mesajı verir.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Varsayılan Durum:&lt;/strong&gt;&lt;br&gt;Eğer kullanıcı bilinmeyen bir komut girerse, bu durumda eklenti mevcut komutları listeleyerek yardımcı olur.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;-cli-arac-n-z-test-etme-&quot;&gt;&lt;strong&gt;CLI Aracınızı Test Etme&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kodunuzu yazdıktan sonra, her şeyin doğru çalışıp çalışmadığını test etmek için projeyi derleyip çalıştırabilirsiniz.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;dotnet &lt;span class=&quot;hljs-built_in&quot;&gt;run&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot;&gt;-- merhaba&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu komutun çıktısı:  &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Merhaba, dünya!
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Başka bir örnek:  &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;dotnet &lt;span class=&quot;hljs-built_in&quot;&gt;run&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot;&gt;-- topla 5 10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu komutun çıktısı:  &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;Sonuç&lt;/span&gt;: 15
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;-hata-y-netimi-ve-geni-letme-&quot;&gt;&lt;strong&gt;Hata Yönetimi ve Genişletme&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Bu örnek, CLI aracınıza nasıl temel komutlar ekleyebileceğinizi göstermektedir. Ancak daha karmaşık bir araç oluşturmak isterseniz şunları ekleyebilirsiniz:  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hata yönetimi:&lt;/strong&gt; Kullanıcıdan gelen hatalı girişleri yakalayıp detaylı hata mesajları gösterebilirsiniz.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Yeni komutlar:&lt;/strong&gt; &lt;code&gt;switch&lt;/code&gt; yapısına yeni komutlar ekleyerek aracınızı genişletebilirsiniz.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dış bağımlılıklar:&lt;/strong&gt; Örneğin, bir HTTP isteği göndermek için &lt;code&gt;HttpClient&lt;/code&gt; kullanabilir veya veritabanına bağlanabilirsiniz.  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bu basit CLI uygulaması, projelerinizi otomatikleştiren, zaman kazandıran araçlar geliştirmek için size iyi bir başlangıç sağlar. Şimdi, bir sonraki adımda bu projeyi paketleyip çalıştırılabilir bir araç haline getireceğiz.&lt;/p&gt;
&lt;h3 id=&quot;-komut-sat-r-arg-manlar-n-y-netmek-i-in-k-t-phaneler-&quot;&gt;&lt;strong&gt;Komut Satırı Argümanlarını Yönetmek İçin Kütüphaneler&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;CLI projeleri büyüdükçe, komut satırı argümanlarını elle işlemek karmaşıklaşabilir. Neyse ki, argümanları daha kolay bir şekilde ayrıştırmak ve işlemek için çeşitli kütüphaneler mevcut. Aşağıda, en popüler ve işlevsel birkaç .NET kütüphanesini bulabilirsiniz:&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;1-system-commandline-&quot;&gt;1. &lt;strong&gt;System.CommandLine&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nedir?&lt;/strong&gt;: Microsoft tarafından geliştirilen resmi bir kütüphanedir. Komutların, alt komutların ve seçeneklerin yönetilmesi için güçlü bir altyapı sunar.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Özellikler&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;Alt komutlar ve çoklu argüman desteği sağlar.&lt;/li&gt;
&lt;li&gt;Otomatik olarak komut yardım dökümünü (help) oluşturur.&lt;/li&gt;
&lt;li&gt;Seçeneklerin kısa ve uzun sürümlerini destekler (örneğin, &lt;code&gt;-v&lt;/code&gt; ve &lt;code&gt;--version&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Örnek Kullanım&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;dotnet add &lt;span class=&quot;hljs-keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;System.CommandLine&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; System.CommandLine;

&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; rootCommand = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; RootCommand(&lt;span class=&quot;hljs-string&quot;&gt;&quot;MyTool - Komut satırı aracınız&quot;&lt;/span&gt;);

rootCommand.AddOption(&lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; Option&amp;lt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt;&amp;gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;--isim&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;Kullanıcının adı&quot;&lt;/span&gt;));
rootCommand.SetHandler((&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; isim) =&amp;gt; {
    Console.WriteLine(&lt;span class=&quot;hljs-string&quot;&gt;$&quot;Merhaba, &lt;span class=&quot;hljs-subst&quot;&gt;{isim}&lt;/span&gt;!&quot;&lt;/span&gt;);
}, &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; Option&amp;lt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt;&amp;gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;--isim&quot;&lt;/span&gt;));

&lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; rootCommand.InvokeAsync(args);
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4 id=&quot;2-commandlineparser-&quot;&gt;2. &lt;strong&gt;CommandLineParser&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nedir?&lt;/strong&gt;: Basit ve esnek bir komut satırı ayrıştırıcıdır. Küçük projelerde hızlıca kullanılabilir.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Özellikler&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;Argümanları doğrudan bir sınıfa bağlayarak (binding) yönetmeyi sağlar.&lt;/li&gt;
&lt;li&gt;Otomatik olarak hata mesajları ve yardım dökümü üretir.&lt;/li&gt;
&lt;li&gt;Seçeneklerin tür dönüştürmesini otomatik olarak yapar.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Örnek Kullanım&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;dotnet add &lt;span class=&quot;hljs-keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;CommandLineParser&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; CommandLine;

&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;Options&lt;/span&gt;
{
    [Option(&lt;span class=&quot;hljs-string&quot;&gt;&#39;n&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;name&quot;&lt;/span&gt;, Required = &lt;span class=&quot;hljs-literal&quot;&gt;true&lt;/span&gt;, HelpText = &lt;span class=&quot;hljs-string&quot;&gt;&quot;Kullanıcının adını belirtir.&quot;&lt;/span&gt;)]
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; Name { &lt;span class=&quot;hljs-keyword&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot;&gt;set&lt;/span&gt;; }
}

&lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;Program&lt;/span&gt;
{
    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;Main&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt;[] args&lt;/span&gt;)
    &lt;/span&gt;{
        Parser.Default.ParseArguments&amp;lt;Options&amp;gt;(args)
            .WithParsed&amp;lt;Options&amp;gt;(opts =&amp;gt; Console.WriteLine(&lt;span class=&quot;hljs-string&quot;&gt;$&quot;Merhaba, &lt;span class=&quot;hljs-subst&quot;&gt;{opts.Name}&lt;/span&gt;!&quot;&lt;/span&gt;));
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4 id=&quot;3-mcmaster-extensions-commandlineutils-&quot;&gt;3. &lt;strong&gt;McMaster.Extensions.CommandLineUtils&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nedir?&lt;/strong&gt;: Komut satırı argümanlarıyla çalışan daha gelişmiş projeler için kullanışlıdır. ASP.NET tarzı &lt;code&gt;attribute&lt;/code&gt; kullanımıyla komutları tanımlamayı sağlar.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Özellikler&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;Alt komut ve seçenek desteği sunar.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;attribute&lt;/code&gt; kullanarak komutlar arasında geçiş sağlar.&lt;/li&gt;
&lt;li&gt;CLI projelerine doğal bir yapı kazandırır.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Örnek Kullanım&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;dotnet add package McMaster&lt;span class=&quot;hljs-selector-class&quot;&gt;.Extensions&lt;/span&gt;&lt;span class=&quot;hljs-selector-class&quot;&gt;.CommandLineUtils&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; McMaster.Extensions.CommandLineUtils;

[Command(Name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;mytool&quot;&lt;/span&gt;, Description = &lt;span class=&quot;hljs-string&quot;&gt;&quot;Özel CLI Aracınız&quot;&lt;/span&gt;)]
&lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;Program&lt;/span&gt;
{
    [Option(&lt;span class=&quot;hljs-string&quot;&gt;&quot;-n|--name &amp;lt;NAME&amp;gt;&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;Kullanıcının adı&quot;&lt;/span&gt;, CommandOptionType.SingleValue)]
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; Name { &lt;span class=&quot;hljs-keyword&quot;&gt;get&lt;/span&gt;; }

    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;Main&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt;[] args&lt;/span&gt;) &lt;/span&gt;=&amp;gt; CommandLineApplication.Execute&amp;lt;Program&amp;gt;(args);

    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;OnExecute&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;/span&gt;)
    &lt;/span&gt;{
        Console.WriteLine(&lt;span class=&quot;hljs-string&quot;&gt;$&quot;Merhaba, &lt;span class=&quot;hljs-subst&quot;&gt;{Name ?? &lt;span class=&quot;hljs-string&quot;&gt;&quot;dünya&quot;&lt;/span&gt;}&lt;/span&gt;!&quot;&lt;/span&gt;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-hangi-k-t-phaneyi-se-melisiniz-&quot;&gt;&lt;strong&gt;Hangi Kütüphaneyi Seçmelisiniz?&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Basit projeler&lt;/strong&gt; için &lt;code&gt;CommandLineParser&lt;/code&gt; hızlı bir başlangıç sağlar.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alt komutlar ve detaylı seçenekler&lt;/strong&gt; ile çalışmanız gerekiyorsa, &lt;strong&gt;System.CommandLine&lt;/strong&gt; iyi bir tercihtir.  &lt;/li&gt;
&lt;li&gt;Daha karmaşık yapıya sahip &lt;strong&gt;büyük projeler&lt;/strong&gt; için, &lt;strong&gt;McMaster.Extensions.CommandLineUtils&lt;/strong&gt; kullanımı projelerinizi modüler hale getirebilir.  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bu kütüphanelerden biriyle çalışarak projenizi daha esnek, okunabilir ve sürdürülebilir hale getirebilirsiniz.&lt;/p&gt;
&lt;h3 id=&quot;4-cli-eklentisini-paketleme&quot;&gt;4. CLI Eklentisini Paketleme&lt;/h3&gt;
&lt;p&gt;Eklentinizi geliştirdikten sonra, onu &lt;strong&gt;.NET CLI aracı&lt;/strong&gt; (tool) olarak paketlemeniz ve kullanıma hazır hale getirmeniz gerekiyor. Bu işlem, aracınızı hem &lt;strong&gt;lokal ortamda&lt;/strong&gt; test etmenize hem de isterseniz NuGet üzerinden dağıtmanıza olanak tanır. Aşağıda adım adım bu süreci nasıl yapacağınızı anlatıyorum.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-paketleme-i-in-projenizi-derleyin-&quot;&gt;&lt;strong&gt;Paketleme İçin Projenizi Derleyin&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Öncelikle projenizin sorunsuz bir şekilde derlendiğinden emin olun. Terminalde proje dizininde aşağıdaki komutu çalıştırın:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;dotnet&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;build &lt;/span&gt;-c Release
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu komut, projenizi &lt;strong&gt;Release&lt;/strong&gt; yapılandırmasında derler ve &lt;code&gt;bin/Release/{framework}&lt;/code&gt; dizinine yerleştirir. Bu aşamada hata almıyorsanız, bir sonraki adımda eklentiyi paketleyebilirsiniz.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-eklentiyi-paketleme-&quot;&gt;&lt;strong&gt;Eklentiyi Paketleme&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;CLI eklentisini kullanıma sunabilmek için bir &lt;strong&gt;NuGet paketi&lt;/strong&gt; oluşturmanız gerekiyor. Aşağıdaki komutu kullanarak projenizi paketleyin:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;dotnet pack -c Release&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu komut, projenizi &lt;code&gt;.nupkg&lt;/code&gt; uzantılı bir NuGet paketi haline getirir. Paket, &lt;code&gt;bin/Release&lt;/code&gt; dizininde bulunacaktır. Örneğin, &lt;code&gt;MyDotNetPlugin.1.0.0.nupkg&lt;/code&gt; şeklinde bir dosya oluşur. &lt;/p&gt;
&lt;p&gt;Paket içeriği şu bilgileri barındırır:  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proje dosyası (&lt;code&gt;.csproj&lt;/code&gt;) ayarları &lt;/li&gt;
&lt;li&gt;Çalıştırılabilir dosya ve kodlar (&lt;code&gt;.exe&lt;/code&gt; veya platforma uygun format)  &lt;/li&gt;
&lt;li&gt;CLI eklentisinin NuGet uyumlu paket tanımları  &lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-lokal-olarak-eklentiyi-kurup-test-etme-&quot;&gt;&lt;strong&gt;Lokal Olarak Eklentiyi Kurup Test Etme&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Eklentinizi NuGet&amp;#39;e göndermeden önce lokal makinenizde test edebilirsiniz. Bunun için paket dosyasını &lt;code&gt;dotnet&lt;/code&gt; ile global olarak kurun:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;dotnet&lt;/span&gt; tool install --&lt;span class=&quot;hljs-meta&quot;&gt;global&lt;/span&gt; --&lt;span class=&quot;hljs-keyword&quot;&gt;add-source &lt;/span&gt;./&lt;span class=&quot;hljs-keyword&quot;&gt;bin/Release &lt;/span&gt;mytool
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu komut, eklentinizi global araçlar (global tools) arasına ekler. Artık terminalde &lt;code&gt;mytool&lt;/code&gt; komutunu doğrudan çalıştırarak test edebilirsiniz:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;mytool merhaba&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Eğer eklenti doğru çalışıyorsa, kurulum başarılı olmuştur.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-nuget-zerinde-yay-nlama-i-ste-e-ba-l-&quot;&gt;&lt;strong&gt;NuGet Üzerinde Yayınlama (İsteğe Bağlı)&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Eğer eklentinizi herkesin erişebileceği şekilde yayınlamak istiyorsanız, NuGet&amp;#39;e yüklemeniz gerekir. Bunun için önce bir &lt;strong&gt;NuGet API key&lt;/strong&gt; edinmelisiniz. NuGet&amp;#39;e giriş yaparak &lt;a href=&quot;https://www.nuget.org/account/apikeys&quot;&gt;buradan&lt;/a&gt; yeni bir API anahtarı oluşturabilirsiniz.&lt;/p&gt;
&lt;p&gt;API anahtarını aldıktan sonra aşağıdaki komutla eklentinizi NuGet&amp;#39;e yükleyin:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;dotnet nuget &lt;span class=&quot;hljs-keyword&quot;&gt;push&lt;/span&gt; bin/Release/MyDotNetPlugin&lt;span class=&quot;hljs-meta&quot;&gt;.1&lt;/span&gt;&lt;span class=&quot;hljs-meta&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;hljs-meta&quot;&gt;.0&lt;/span&gt;.nupkg -k &amp;lt;API_KEY&amp;gt; -s https://api.nuget.org/v3/index.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu komut, NuGet sunucusuna eklentinizi gönderir. Eğer yükleme başarılı olursa, eklentiniz kısa süre içinde NuGet galerisinde görünecektir.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-g-ncelleme-ve-kald-rma-&quot;&gt;&lt;strong&gt;Güncelleme ve Kaldırma&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Kullanıcılar eklentinizi yükledikten sonra güncellemeleri ve kaldırmaları için aşağıdaki komutları verebilirler:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Güncelleme:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;dotnet tool update -g mytool&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kaldırma:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;dotnet tool uninstall -g mytool&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bu komutlar, eklentinizin yeni sürümlerini dağıttığınızda kullanıcıların kolayca güncelleme yapmasını sağlar.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-paketleme-ve-yay-nlama-s-ras-nda-kar-la-labilecek-sorunlar-&quot;&gt;&lt;strong&gt;Paketleme ve Yayınlama Sırasında Karşılaşılabilecek Sorunlar&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&amp;quot;Tool &amp;#39;mytool&amp;#39; was not found&amp;quot; hatası:&lt;/strong&gt;&lt;br&gt;Eklentiyi kurarken bu hatayı alırsanız, paket adının ve &lt;code&gt;ToolCommandName&lt;/code&gt; ayarının doğru olup olmadığını kontrol edin.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NuGet API hataları:&lt;/strong&gt;&lt;br&gt;API anahtarınızın doğru olduğundan ve NuGet üzerindeki paket tanımlarınızın eksiksiz olduğundan emin olun.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Eksik bağımlılıklar:&lt;/strong&gt;&lt;br&gt;Eklentiniz başka kütüphanelere bağımlıysa, &lt;code&gt;*.csproj&lt;/code&gt; dosyasında tüm bağımlılıkların tanımlandığından emin olun.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Bu adımlarla, CLI eklentinizi başarıyla paketleyebilir ve isterseniz NuGet galerisinde yayınlayabilirsiniz. Paketleme işlemi, aracınızı farklı sistemlerde kolayca kullanmanıza ve paylaşmanıza olanak sağlar.&lt;/p&gt;
&lt;h3 id=&quot;5-nuget-zerinden-yay-nlama-veya-lokal-kurulum&quot;&gt;5. NuGet Üzerinden Yayınlama veya Lokal Kurulum&lt;/h3&gt;
&lt;p&gt;CLI eklentinizi yayınladıktan sonra iki şekilde kullanılabilir hale getirebilirsiniz: &lt;strong&gt;lokal kurulum&lt;/strong&gt; ile kendi makinenizde test edebilir veya &lt;strong&gt;NuGet galerisinde&lt;/strong&gt; yayınlayarak herkesin kullanımına sunabilirsiniz. Bu adımda, her iki yöntemi de ayrıntılarıyla inceleyeceğiz.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-lokal-kurulum-&quot;&gt;&lt;strong&gt;Lokal Kurulum&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Eklentinizi NuGet&amp;#39;e göndermeden önce lokal ortamda test etmek iyi bir fikirdir. Böylece paketleme işleminin başarılı olup olmadığını ve komutların beklediğiniz gibi çalışıp çalışmadığını görebilirsiniz.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Paket Dosyanızın Yolunu Belirleyin:&lt;/strong&gt;&lt;br&gt;Derleme işleminden sonra &lt;code&gt;bin/Release&lt;/code&gt; dizininde oluşturulan &lt;code&gt;.nupkg&lt;/code&gt; dosyasının bulunduğu konuma gidin.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Eklentiyi Lokal Olarak Kurun:&lt;/strong&gt;
Aşağıdaki komutla, eklentiyi makinenize global olarak kurun:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;dotnet&lt;/span&gt; tool install --&lt;span class=&quot;hljs-meta&quot;&gt;global&lt;/span&gt; --&lt;span class=&quot;hljs-keyword&quot;&gt;add-source &lt;/span&gt;./&lt;span class=&quot;hljs-keyword&quot;&gt;bin/Release &lt;/span&gt;mytool
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kurulum Sonrası Test Edin:&lt;/strong&gt;&lt;br&gt;Eklentinizin çalışıp çalışmadığını görmek için komut satırında aşağıdaki gibi basit bir komut çalıştırın:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;mytool merhaba&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Çıktı:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Merhaba, dünya!
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kurulumu Kaldırmak:&lt;/strong&gt;&lt;br&gt;Test işlemi bittikten sonra eklentiyi kaldırmak isterseniz, şu komutu kullanın:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;dotnet tool uninstall -g mytool&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-nuget-zerinde-yay-nlama-&quot;&gt;&lt;strong&gt;NuGet Üzerinde Yayınlama&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Eğer eklentinizi herkesin erişimine açmak istiyorsanız, NuGet üzerinde yayınlamanız gerekir. Aşağıda, NuGet yayınlama adımlarını bulabilirsiniz.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NuGet API Anahtarını Alın:&lt;/strong&gt;&lt;br&gt;NuGet galerisinde oturum açın ve &lt;a href=&quot;https://www.nuget.org/account/apikeys&quot;&gt;NuGet API Keys&lt;/a&gt; sayfasına gidin. Buradan yeni bir API anahtarı oluşturun.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NuGet Paketini Gönderme:&lt;/strong&gt;&lt;br&gt;Aşağıdaki komutu kullanarak paket dosyanızı NuGet sunucusuna yükleyin:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;dotnet nuget &lt;span class=&quot;hljs-keyword&quot;&gt;push&lt;/span&gt; bin/Release/MyDotNetPlugin&lt;span class=&quot;hljs-meta&quot;&gt;.1&lt;/span&gt;&lt;span class=&quot;hljs-meta&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;hljs-meta&quot;&gt;.0&lt;/span&gt;.nupkg -k &amp;lt;API_KEY&amp;gt; -s https://api.nuget.org/v3/index.json
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Paketin Yayınlandığını Kontrol Edin:&lt;/strong&gt;&lt;br&gt;Yükleme işlemi tamamlandığında, paketinizin NuGet galerisinde görünüp görünmediğini kontrol edin. Birkaç dakika içinde &lt;strong&gt;&lt;a href=&quot;https://www.nuget.org&quot;&gt;https://www.nuget.org&lt;/a&gt;&lt;/strong&gt; adresinde eklentiniz listelenmiş olmalıdır.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-nuget-zerinden-kurulum-ve-g-ncelleme-&quot;&gt;&lt;strong&gt;NuGet Üzerinden Kurulum ve Güncelleme&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Paketiniz NuGet galerisinde yayınlandıktan sonra, kullanıcılar aşağıdaki komutla eklentiyi kurabilirler:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;dotnet tool &lt;span class=&quot;hljs-keyword&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot;&gt;--global mytool&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Eğer eklentinizin yeni bir sürümünü yayınladıysanız, kullanıcılar şu komutla güncelleyebilirler:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;dotnet tool update -g mytool&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kurulumda veya güncellemede bir sorun olursa, kullanıcılar paketinizin NuGet adresini kontrol edebilir veya paket bağımlılıklarının doğru tanımlandığından emin olmalıdır.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-yay-nlama-ve-kurulum-sorunlar-&quot;&gt;&lt;strong&gt;Yayınlama ve Kurulum Sorunları&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;API Hatası:&lt;/strong&gt; API anahtarınızı doğru şekilde girdiğinizden ve anahtarın süresinin dolmadığından emin olun.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paket Bulunamıyor:&lt;/strong&gt; Eğer kullanıcılar paketinizin adını bulamıyorsa, &lt;code&gt;ToolCommandName&lt;/code&gt; ile paket adınızın uyumlu olduğundan emin olun.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paket Versiyonları:&lt;/strong&gt; NuGet sürümleme kurallarına uymak için her güncellemede versiyon numarasını artırmanız gerekir.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Bu adımlarla, eklentinizi hem lokal ortamda test edip hem de NuGet üzerinde tüm kullanıcılara açabilirsiniz. Bu süreç, aracınızın farklı platformlarda kullanılabilmesini ve güncel tutulmasını sağlar.&lt;/p&gt;
&lt;h3 id=&quot;6-kullan-m&quot;&gt;6. Kullanım&lt;/h3&gt;
&lt;p&gt;CLI eklentinizi başarıyla paketleyip kurduktan sonra, komut satırında kullanıma hazır hale gelir. Şimdi, eklentinizi nasıl kullanabileceğinizi, farklı komutları nasıl çalıştırabileceğinizi ve olası kullanım senaryolarını inceleyelim.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-kurulu-eklentiyi-al-t-rma-&quot;&gt;&lt;strong&gt;Kurulu Eklentiyi Çalıştırma&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Eğer eklentinizi &lt;strong&gt;lokal olarak&lt;/strong&gt; kurduysanız veya &lt;strong&gt;NuGet galerisinden&lt;/strong&gt; yüklediyseniz, eklentinizi komut satırında kullanmaya hazırsınız. Eklentiyi şu şekilde çalıştırabilirsiniz:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;mytool&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Eğer komut satırında bir argüman vermeden çalıştırırsanız, eklentiniz varsayılan bir talimat veya bilgi mesajı dönecektir. Örneğin, aşağıdaki gibi:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Kullanı&lt;span class=&quot;hljs-string&quot;&gt;m:&lt;/span&gt; mytool &amp;lt;komut&amp;gt; [parametreler]
Ö&lt;span class=&quot;hljs-string&quot;&gt;rnek:&lt;/span&gt; mytool merhaba
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h4 id=&quot;-komut-rnekleri-&quot;&gt;&lt;strong&gt;Komut Örnekleri&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Eklentinizin içine yazdığınız komutlara göre farklı çıktılar alabilirsiniz. Örnek olarak, eklentinizde tanımlı olan komutların nasıl çalıştığını inceleyelim:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Merhaba Komutu:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;mytool merhaba&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Çıktı:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Merhaba, dünya!
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zaman Komutu:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;mytool zaman&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Çıktı:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Ş&lt;span class=&quot;hljs-selector-tag&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;hljs-selector-tag&quot;&gt;anki&lt;/span&gt; &lt;span class=&quot;hljs-selector-tag&quot;&gt;saat&lt;/span&gt;: 2024&lt;span class=&quot;hljs-selector-tag&quot;&gt;-10-24&lt;/span&gt; 12&lt;span class=&quot;hljs-selector-pseudo&quot;&gt;:45&lt;/span&gt;&lt;span class=&quot;hljs-selector-pseudo&quot;&gt;:00&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Topla Komutu:&lt;/strong&gt;
Kullanıcıdan iki sayı alarak toplamını hesaplar:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;mytool topla &lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Çıktı:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;Sonuç&lt;/span&gt;: 30
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hatalı Komut Girişi:&lt;/strong&gt;
Eklentiye tanımlanmayan bir komut verdiğinizde:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;mytool bilinmeyen&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Çıktı:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;Bilinmeyen &lt;/span&gt;komut: &lt;span class=&quot;hljs-keyword&quot;&gt;bilinmeyen
&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;Kullan&lt;/span&gt;ılabilir komutlar: merhaba, zaman, topla
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-eklentiyi-g-ncelleme-ve-kald-rma-&quot;&gt;&lt;strong&gt;Eklentiyi Güncelleme ve Kaldırma&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Güncelleme:&lt;/strong&gt;&lt;br&gt;Eğer eklentinin daha yeni bir sürümü yayınlandıysa, kullanıcılar aşağıdaki komutla en son sürüme güncelleyebilir:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;dotnet tool update -g mytool&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Kaldırma:&lt;/strong&gt;&lt;br&gt;Eklentiyi sisteminizden kaldırmak isterseniz, şu komutu kullanın:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;dotnet tool uninstall -g mytool&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-farkl-senaryolar-i-in-kullan-m-&quot;&gt;&lt;strong&gt;Farklı Senaryolar İçin Kullanım&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Komut satırı otomasyonu:&lt;/strong&gt; Sık tekrarlanan işlemleri otomatikleştirmek için eklentiyi planlayıcılar veya CI/CD süreçlerinde kullanabilirsiniz.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alt komutlarla modüler yapı:&lt;/strong&gt; Komut satırına yeni alt komutlar ekleyerek eklentiyi modüler hale getirebilirsiniz.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parametrelerle esnek yapı:&lt;/strong&gt; İsteğe bağlı parametreler ekleyerek kullanıcıya daha fazla esneklik sağlayabilirsiniz.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;7-g-ncelleme-ve-kald-rma&quot;&gt;7. Güncelleme ve Kaldırma&lt;/h3&gt;
&lt;p&gt;CLI eklentinizin kullanıcıların sistemlerinde sorunsuz çalışmaya devam etmesi için zaman zaman güncellemeler yapmanız gerekebilir. Ayrıca, kullanıcılar istedikleri zaman eklentiyi kaldırmak isteyebilirler. Bu bölümde, eklentinizin &lt;strong&gt;güncellenmesi&lt;/strong&gt; ve &lt;strong&gt;kaldırılması&lt;/strong&gt; süreçlerini inceleyeceğiz.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-g-ncelleme-i-lemi-&quot;&gt;&lt;strong&gt;Güncelleme İşlemi&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Eğer eklentinizin yeni bir sürümünü yayınladıysanız (örneğin, hata düzeltmeleri veya yeni özellikler eklediyseniz), kullanıcılar bu sürüme kolayca geçiş yapabilirler. Güncelleme işlemi aşağıdaki komut ile yapılır:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;dotnet tool update -g mytool&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu komut, NuGet üzerindeki en son sürümü kontrol eder ve otomatik olarak indirip kurar. Eğer güncelleme başarılı olursa, terminalde aşağıdaki gibi bir mesaj alırsınız:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Tool &lt;span class=&quot;hljs-string&quot;&gt;&#39;mytool&#39;&lt;/span&gt; was successfully updated &lt;span class=&quot;hljs-built_in&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;hljs-number&quot;&gt;.0&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Not:&lt;/strong&gt;  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kullanıcıların yeni sürümü edinebilmesi için, yayınlanan sürüm numarasının artırılmış olması gerekir (örneğin, 1.0.0’dan 1.1.0’a).&lt;/li&gt;
&lt;li&gt;Eğer kullanıcı güncelleme sırasında hata alırsa, NuGet paket önbelleği veya ağ bağlantısını kontrol etmeleri gerekebilir.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-eklentiyi-kald-rma-&quot;&gt;&lt;strong&gt;Eklentiyi Kaldırma&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Kullanıcılar herhangi bir nedenle eklentiyi sistemlerinden kaldırmak isterse, şu komutu kullanabilirler:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;dotnet tool uninstall -g mytool&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu komut, eklentiyi sistemden kaldırır ve global araçlar listesinden siler. Eğer işlem başarılı olursa, şu mesaj görüntülenir:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;Tool&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&#39;mytool&#39;&lt;/span&gt; was successfully uninstalled.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Not:&lt;/strong&gt;  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Eğer kullanıcı farklı bir versiyona sahip birden fazla kurulum yaptıysa (örneğin lokal ve global), her kurulum için ayrı ayrı kaldırma komutu çalıştırmaları gerekebilir.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-olas-sorunlar-ve-z-mleri-&quot;&gt;&lt;strong&gt;Olası Sorunlar ve Çözümleri&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;“Tool not found” Hatası:&lt;/strong&gt; Kullanıcı eklentiyi daha önce kurmamış olabilir veya doğru isimle kaldırma komutunu vermemiş olabilir. Bu durumda, şu komutla yüklü araçları kontrol edin:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;dotnet tool &lt;span class=&quot;hljs-built_in&quot;&gt;list&lt;/span&gt; -g
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Güncelleme Hataları:&lt;/strong&gt; Eğer güncelleme sırasında NuGet’e bağlantı sağlanamıyorsa, kullanıcının ağ bağlantısını kontrol etmesi veya NuGet kaynağını manuel olarak belirtmesi gerekebilir:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;dotnet tool &lt;span class=&quot;hljs-keyword&quot;&gt;update&lt;/span&gt; -g mytool --&lt;span class=&quot;hljs-built_in&quot;&gt;add&lt;/span&gt;-&lt;span class=&quot;hljs-keyword&quot;&gt;source&lt;/span&gt; http&lt;span class=&quot;hljs-variable&quot;&gt;s:&lt;/span&gt;//api.nuget.org/v3/&lt;span class=&quot;hljs-built_in&quot;&gt;index&lt;/span&gt;.json
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-g-ncelleme-ve-kald-rma-s-recinin-nemi-&quot;&gt;&lt;strong&gt;Güncelleme ve Kaldırma Sürecinin Önemi&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Güncel kalmak:&lt;/strong&gt; Eklentiyi düzenli olarak güncelleyerek hata düzeltmeleri ve performans iyileştirmeleri sunabilirsiniz.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Esnek kullanım:&lt;/strong&gt; Kullanıcıların istedikleri zaman eklentiyi kaldırabilmesi, onların sistem yönetimini kolaylaştırır ve eklentinizin kullanıcı dostu olmasını sağlar.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Bu adımlarla, kullanıcılar eklentinizi kolayca güncelleyebilir ve gerekirse sistemlerinden kaldırabilirler. Eklentiyi düzenli olarak güncel tutarak daha iyi bir deneyim sunabilir ve kullanıcılarınıza ihtiyaçlarına uygun yeni özellikler sağlayabilirsiniz.&lt;/p&gt;
&lt;h3 id=&quot;-zet&quot;&gt;Özet&lt;/h3&gt;
&lt;p&gt;Bu makalede, &lt;strong&gt;.NET CLI&lt;/strong&gt; için kendi eklentinizi nasıl geliştirebileceğinizi adım adım inceledik. Basit bir &lt;strong&gt;console application&lt;/strong&gt; projesinden yola çıkarak, projenizi nasıl CLI aracı haline getirebileceğinizi, paketleyip lokal ortamda test edebileceğinizi ve NuGet üzerinden yayınlayabileceğinizi gördük. Ayrıca, eklentinize farklı komutlar ekleme, argümanları işleme için kullanışlı kütüphaneleri tanıma ve güncelleme-kaldırma işlemleri hakkında bilgi sahibi olduk.  &lt;/p&gt;
&lt;p&gt;CLI eklentileri, sık tekrarlanan görevleri otomatikleştirmenin ve yazılım geliştirme süreçlerinizi hızlandırmanın mükemmel bir yoludur. Kendi eklentilerinizi geliştirerek, hem projelerinize özel araçlar oluşturabilir hem de iş akışınızı optimize edebilirsiniz. NuGet üzerinde yayınladığınız araçlarla, hem kendinize hem de topluluğa katkıda bulunabilirsiniz.  &lt;/p&gt;
&lt;p&gt;Artık elinizde, temel CLI araçları geliştirmek ve yayınlamak için gereken tüm bilgiler var. Projelerinizi geliştirdikçe, yeni komutlar ekleyebilir, argüman işleme sürecini genişletebilir ve aracınızı daha modüler hale getirebilirsiniz. Hangi projede olursanız olun, bir CLI aracıyla işlerinizi daha hızlı ve verimli hale getirmek tamamen sizin elinizde!  &lt;/p&gt;
&lt;p&gt;Eklentinizi geliştirme ve paylaşma sürecinde başarılar!&lt;/p&gt;
</description><link>http://www.alperkonuralp.com/2024/10/net-cli-eklentisi-gelistirme-kendi.html</link><author>noreply@blogger.com (Alper Konuralp)</author><thr:total>0</thr:total><georss:featurename>İstanbul, Türkiye</georss:featurename><georss:point>41.0082376 28.9783589</georss:point><georss:box>12.698003763821156 -6.1778911 69.318471436178839 64.1346089</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-3045949654049531145</guid><pubDate>Sat, 28 Sep 2024 11:31:00 +0000</pubDate><atom:updated>2024-09-28T16:25:44.731+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AI</category><category domain="http://www.blogger.com/atom/ns#">Amazon Q Developer</category><category domain="http://www.blogger.com/atom/ns#">ChatGPT</category><category domain="http://www.blogger.com/atom/ns#">Llama3.1</category><category domain="http://www.blogger.com/atom/ns#">Qwen2.5-coder</category><category domain="http://www.blogger.com/atom/ns#">StarCoder2</category><category domain="http://www.blogger.com/atom/ns#">Yapay Zeka</category><title>Kodlamada Yapay Zeka nasıl?</title><description>&lt;p&gt;Merhaba,&lt;/p&gt;&lt;p&gt;Kodlama yaparken yapay zekadan faydalandığımızda esasında ne kadar yararlı! bir araç olduğunu farkediyoruz. Ben özellikle son dönemde şirketimizin Amazon ile anlaşması sayesinde Amazon Q Developer&#39;ı deneyimliyorum. Bu noktada özellikle kod tamamlama noktasında başarılı olduğunu bazen tam yazmak istediğimi tahmin ettiğini görmek farklı ve güzel olabilmekte. Ancak sohbet üzerinden birşeyler sorduğumuzda gelen cevapların ne kadar sağlıklı olduğu noktasında çok büyük çekincelerim var. Bu sebeple bu haliyle yapay zekanın şu anki halinin bize belli noktaya kadar faydalı bir asistandan öteye gidemediğini söylemek yanlış olmaz. Bu makalede sizlerle paylaşmak istediğim bir örnek senaryo var. Bu senaryo ile bizim repository katmanında geliştirdiğimiz bir kodun refactoring süreci sırasında karşılaştım. Şöyle ki, kullanmakta olduğumuz bir standart repository metodunun bir senaryoda boşu boşuna veri tabanına gittiğini farkettim. Bunu düzeltmek için bir kod değişikliğini önce kendim yaptım. Sonrada bakalım Amazon Q Developer ve diğer yapay zeka modelleri bu konuda ne yapacak diye düşünerek aynı durumdaki diğer method&#39;da bu değişikliği yapay zekadan istedim. Makalenin devamında sonuçları sizlerle paylaşacağım. &lt;/p&gt;&lt;p&gt;Öncelikle kodun benim değiştirdiğim halini sizlere göstermek istiyorum:&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuHpaytbGGKR2jtaQ_s9YVBmj7sPKOzE9tK0azZJz0zUvlHAA_BbKiKgGYkPYY2lLNIzwjgKLhBQpRyFUT7gWA2IrP7OyHvyEtLbpGvrbP2dr0LltxdasTfB2lXJQtzi4l8Qc8catYF_Q9Q3AF4PBWOmsxVZFhwPKGiKokoTkgXfEE5wTa5ClV35xZf6cB/s1869/Code1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;477&quot; data-original-width=&quot;1869&quot; height=&quot;82&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuHpaytbGGKR2jtaQ_s9YVBmj7sPKOzE9tK0azZJz0zUvlHAA_BbKiKgGYkPYY2lLNIzwjgKLhBQpRyFUT7gWA2IrP7OyHvyEtLbpGvrbP2dr0LltxdasTfB2lXJQtzi4l8Qc8catYF_Q9Q3AF4PBWOmsxVZFhwPKGiKokoTkgXfEE5wTa5ClV35xZf6cB/s320/Code1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Bu kodda görebileceğiniz gibi ListByIdsAsync metodu bir ids parametresi alıyor. Eğer bu parametre null ve boş ise o zaman sorgu boşu boşuna DB&#39;ye erişip hiç birşey dönmese dahi DB&#39;yi meşkul ediyor. Bu yüzden buradaki işleme bir el atmak gerekiyordu. Bu noktada benim yaptığım müdehale parametreden gelen bilginin dolu olup olmadığını kontrol eden kodları içeri yerleştirmek şeklinde oldu. Bu sayede eğer veri yok ise hiç db&#39;ye gitmeden geriye boş bir list dönebiliyoruz. Bu da işlem zamanımızı azaltıyor.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Bu kodda dikkat etmek gereken bazı noktalar vardı. Şöyle ki, parametre tipimiz IEnumerable türünde olduğu için normalde IEnumerable tipinin forward only bir tip olduğunu unutmamak lazım. Bu şu anlama geliyor. Herhangi bir nedenden dolayı bu tipin içindeki verileri bir kere okursanız, aynı referans üzerinden tekrar işlem yaptığınızda boş bir eleman sizi karşılayabilir. Bu sebeple eğer kontrol yapacak isem bu veriyi korumaya almam şart. Bende bunu sağlamak için yeni koddaki 120. satırı yazdım. ids.ToArray() metodu ile verimizi bir diziye dönüştürüyoruz. Sonrada bu dizi üzerinden istediğimiz işleri istediğimiz kadar tekrar tekrar yapabiliyoruz. Ancak bunun ilave bir memory kullanımı olacağını unutmamak lazım. Bu sebeple core repository&#39;miz içinde benzer bir metot daha eklemek daha iyi sonuçlar verecektir. Neyse konumuz şu anda bu değil. &lt;/p&gt;&lt;p&gt;Biz konumuza döndüğümüzde, koddaki değişikliğimiz böyle. 2. metodumuz olan ListBySourceColumnListAsync isimli metotda benzer bir işlemi Q developer ile yapmaya çalıştığımda şöyle bir sonuç aldım. Burada esasında bir ekrana sığmayan bir görüntü idi. Ben PhotoShop yardımıyla bu parçaları birleştirerek tek bir ekran görüntüsüne dönüştürdüm : &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-eG-GBQhyDyrdEL7C1XjK0_s9JmNyv-u4Hlis8tOqKtnG3fNfMii-5Jpe5F8XaZKMxDXs4yZk9sZDtq_QonlafEK5WwcH5_M38hpkpOqb418lzNzZw38yk88uqZA19m8nn8ZkUPbgHxMJ30nrsXMFPzdF4gHxtQx4Hl_44eJy3oifYbfhbBHyX0PhJR9i/s4329/Amazon%20Code%20Wispher.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4329&quot; data-original-width=&quot;1897&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-eG-GBQhyDyrdEL7C1XjK0_s9JmNyv-u4Hlis8tOqKtnG3fNfMii-5Jpe5F8XaZKMxDXs4yZk9sZDtq_QonlafEK5WwcH5_M38hpkpOqb418lzNzZw38yk88uqZA19m8nn8ZkUPbgHxMJ30nrsXMFPzdF4gHxtQx4Hl_44eJy3oifYbfhbBHyX0PhJR9i/s320/Amazon%20Code%20Wispher.jpg&quot; width=&quot;140&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Sonuç böyle olunca hemen ChatGPT ne diyecek diye baktım : &lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhupTdXjyw6k0mop0o0OzIXMk9OGbhpOGaqGcytR0vqQHvOJEr_kn39V5cXXq4T0vcsjxqCjtVYb9ieIcnhZOjeIwXYOxojCMob9PwVWUp4Nn5gNoLqIAKBSsg7hTpIhzr24WY0Hvb47v8mTGyUVwpyQJ31n1RRkhSW82gusfGB5x9sl-6SgmuSgaBAjpi3/s879/ChatGPT1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;879&quot; data-original-width=&quot;813&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhupTdXjyw6k0mop0o0OzIXMk9OGbhpOGaqGcytR0vqQHvOJEr_kn39V5cXXq4T0vcsjxqCjtVYb9ieIcnhZOjeIwXYOxojCMob9PwVWUp4Nn5gNoLqIAKBSsg7hTpIhzr24WY0Hvb47v8mTGyUVwpyQJ31n1RRkhSW82gusfGB5x9sl-6SgmuSgaBAjpi3/s320/ChatGPT1.jpg&quot; width=&quot;296&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Tabi buradan başlayınca lokalde çalıştırdığım modellere de bir bakayım dedim. Kullandığım prompt şöyle : &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;Aşağıdaki koddaki sourceItemId parametresi null veya boş ise direk boş liste dönsün istiyorum. Bunu yapmanın en doğru yolu ne olur?&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;```csharp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Task&amp;lt;List&amp;lt;TEntity&amp;gt;&amp;gt; ListBySourceColumnListAsync(string sourceProviderKey, IEnumerable&amp;lt;string&amp;gt; sourceItemId)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _dbContext&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Set&amp;lt;TEntity&amp;gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .AsNoTracking()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Where(x =&amp;gt; x.SourceProviderKey == sourceProviderKey&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;amp; sourceItemId.Contains(x.SourceItemId))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .ToListAsync();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Öncelikle qwen2.5-coder modeli ile denedim: bu model benimle çok muhattap bile olmadı. Tek satırla beni başından savdı:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWnmw9twRV_nIIwf4CZDlNDMNJ7L8g14HO051Hhz5rNWRxvCNoFujGXIjzcZ9cPXWjtbLrUL4wkmhLzq11qOEPR3ktwMMypY_bJSM8l_eb9Pq_gaJad1jW1IP64r7mDgBznDaQTu2MUMmTF9RXF9bvwj6LEmm6ZYHhsCyn7olNLlNokXzSa62Cf8EDH-WJ/s1644/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202024-09-28%20103941.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;753&quot; data-original-width=&quot;1644&quot; height=&quot;147&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWnmw9twRV_nIIwf4CZDlNDMNJ7L8g14HO051Hhz5rNWRxvCNoFujGXIjzcZ9cPXWjtbLrUL4wkmhLzq11qOEPR3ktwMMypY_bJSM8l_eb9Pq_gaJad1jW1IP64r7mDgBznDaQTu2MUMmTF9RXF9bvwj6LEmm6ZYHhsCyn7olNLlNokXzSa62Cf8EDH-WJ/s320/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202024-09-28%20103941.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Bir sonraki denemeyi Llama3.1 ile yaptım, sonuç yine hüsran. Ayrıca Llama daha kötü çünkü her nekadar bu işlem çalıştırılmayacak olsa da(Entity Framework Core bu Linq Expression&#39;ı Sql cümlesine çevireceği için) yaklaşım hem EF içinde hemde normal bir .Net koleksiyonunda olsa gereksiz işlemlere neden olacaktır. &lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqu1kM2_EpS1qnqbXyKA_8SHDYLd1UxsgAdf0ntMfkUygVTnyUuS85iisoYIqimcXNCBcF8MDojG6JHgQ435gqzRm2twkKZVBMHJeFSEozRreGKfAMz68qfosMX2IRoHvJZp8tqaeYth5pSi3lZs3459xDxZ-NuFrPRiV_Dct2BR7C73hhnD9LjPESTvr1/s1668/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202024-09-28%20104238.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;798&quot; data-original-width=&quot;1668&quot; height=&quot;153&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqu1kM2_EpS1qnqbXyKA_8SHDYLd1UxsgAdf0ntMfkUygVTnyUuS85iisoYIqimcXNCBcF8MDojG6JHgQ435gqzRm2twkKZVBMHJeFSEozRreGKfAMz68qfosMX2IRoHvJZp8tqaeYth5pSi3lZs3459xDxZ-NuFrPRiV_Dct2BR7C73hhnD9LjPESTvr1/s320/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202024-09-28%20104238.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Birde lokalimde olmayan ama başka bir model olsun diye &lt;a href=&quot;http://ollama.com&quot;&gt;ollama.com&lt;/a&gt; üzerinden indirdiğim starcoder2 isimli model ile denedim ve sonuç yine hüsran oldu: &lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1ku2ZbLsqtgTfu9n4QdIalaaDV4P_L1vcmYkDUm0GugXqZgkAsC48ThDnqkADZ9h_mzsQwYDUBfxWcs3pJDBt67cN619MbLsgCAON7JLw8KY44ZY8qrj1BTLbJZ63AfZ4h67qMcS-W05lI1AQEpE_PNcT3DRqQtXlR5o4a9JJa_F7xYnQKopuYk9Oye1S/s1749/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202024-09-28%20105300.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;786&quot; data-original-width=&quot;1749&quot; height=&quot;144&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1ku2ZbLsqtgTfu9n4QdIalaaDV4P_L1vcmYkDUm0GugXqZgkAsC48ThDnqkADZ9h_mzsQwYDUBfxWcs3pJDBt67cN619MbLsgCAON7JLw8KY44ZY8qrj1BTLbJZ63AfZ4h67qMcS-W05lI1AQEpE_PNcT3DRqQtXlR5o4a9JJa_F7xYnQKopuYk9Oye1S/s320/Ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC%202024-09-28%20105300.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Sonuç olarak;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Bu durumu gördükten sonra yapay zekanın bizim işimizi elimizden alacağı zamanın daha gelmediğini açıkça görebiliyoruz. NVidia CEO&#39;su bence biraz erken konuştu. Neden böyle olduğu ile ilgili daha detaylı bilgi için sizi Evrim Ağacının &lt;a href=&quot;https://youtu.be/hWMRd2mslCo?si=1RtCXt_NX-5zps2Z&quot; target=&quot;_blank&quot;&gt;&quot;Yapay Zeka Balonu Ne Zaman Patlayacak?&quot;&lt;/a&gt; isimli videosuna yönlendirebilirim. Ama özet olarak LLM modelleri sizin onlara gönderdiğiniz promptları tam olarak anlamıyorlar. Sadece bu kelimelerin birbirleri ardına gelmesinin istatistiği üzerinde çalışıyorlar. O yüzden de bize verdikleri cevaplar yaratıcılıktan yoksun. Buna bir anlamda düşünmeden ezbere cevap veriyorlar desek daha doğru olur.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Evet işte böyle. Bir makalenin sonuna daha geldik. başka bir makalede görüşmek üzere. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description><link>http://www.alperkonuralp.com/2024/09/kodlamada-yapay-zeka-nasl.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuHpaytbGGKR2jtaQ_s9YVBmj7sPKOzE9tK0azZJz0zUvlHAA_BbKiKgGYkPYY2lLNIzwjgKLhBQpRyFUT7gWA2IrP7OyHvyEtLbpGvrbP2dr0LltxdasTfB2lXJQtzi4l8Qc8catYF_Q9Q3AF4PBWOmsxVZFhwPKGiKokoTkgXfEE5wTa5ClV35xZf6cB/s72-c/Code1.jpg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>İstanbul, Türkiye</georss:featurename><georss:point>41.0082376 28.9783589</georss:point><georss:box>12.698003763821156 -6.1778911 69.318471436178839 64.1346089</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-1004538849411785254</guid><pubDate>Fri, 27 Sep 2024 19:23:00 +0000</pubDate><atom:updated>2024-09-27T22:23:05.777+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.Net</category><category domain="http://www.blogger.com/atom/ns#">.Net 8</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Yazılım Geliştirme</category><title>Yolun Başında: “.Net 8 ve C# Yolculuğumuz”</title><description>&lt;p&gt;Yazılım dünyasında teknoloji hızla değişiyor ve her yeni sürüm, bizlere daha hızlı, güvenli ve verimli uygulamalar geliştirme fırsatı sunuyor. &lt;strong&gt;.NET 8&lt;/strong&gt;, bu yolculuğun en son durağı ve bu seride, bu güçlü platformu derinlemesine inceleyeceğiz. &lt;strong&gt;C#&lt;/strong&gt;, yıllardır yazılım dünyasında kendini kanıtlamış bir dil. Ancak, .NET ekosistemindeki gelişmelerle birlikte, C#&#39;ı ve .NET platformunu kullanmak artık daha da güçlü hale geldi. Performans iyileştirmeleri, modern uygulama geliştirme pratikleri ve dağıtık sistem desteği gibi yenilikler, &lt;strong&gt;.NET 8&lt;/strong&gt;&#39;i her zamankinden daha cazip bir hale getiriyor.&lt;/p&gt;&lt;h2&gt;C# ve .NET: Kısa Bir Tarihçe&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;C#&lt;/strong&gt;, 2000 yılında Microsoft tarafından geliştirilen modern, nesne yönelimli bir programlama dilidir. Başlangıçta &lt;strong&gt;.NET Framework&lt;/strong&gt; ile birlikte gelen C#, Windows tabanlı uygulama geliştirmeye odaklanmıştı. Ancak 2002 yılında .NET Framework&#39;ün ilk sürümüyle birlikte C# ve .NET platformu hızla evrildi.&lt;/p&gt;&lt;p&gt;.NET, başlangıçta yalnızca Windows&#39;ta çalışırken, &lt;strong&gt;.NET Core&lt;/strong&gt;&#39;un 2016&#39;da piyasaya sürülmesiyle açık kaynaklı ve platformlar arası bir hal aldı. Bu gelişme, Microsoft’un kapalı ekosistemden uzaklaşıp daha geniş bir geliştirici topluluğuna hitap etmesini sağladı. .NET 5 ile başlayan birleşik .NET platformu, &lt;strong&gt;.NET 6&lt;/strong&gt; ve &lt;strong&gt;.NET 7&lt;/strong&gt; sürümlerinde daha da olgunlaştı ve bugün &lt;strong&gt;.NET 8&lt;/strong&gt;, hem platformlar arası geliştirmede hem de performans ve güvenlik açısından büyük yeniliklerle karşımızda.&lt;/p&gt;&lt;h2&gt;Her Seviyeden Geliştirici İçin Bir Rehber&lt;/h2&gt;&lt;p&gt;Bu seriyi yazarken hedefim, her seviyeden yazılımcıya hitap edebilecek bir içerik sunmak. İster .NET dünyasına yeni adım atan biri olun, ister yıllardır bu platformla projeler geliştiriyor olun, burada öğrenebileceğiniz ve uygulayabileceğiniz birçok bilgi bulacaksınız. &lt;strong&gt;.NET 8&lt;/strong&gt;, geliştiricilere sunduğu geniş araç seti ve performans geliştirmeleri ile her seviyeden yazılımcının ilgisini çekecek. Amacımız, teorik bilginin ötesine geçerek pratiğe dayalı, gerçek hayatta karşılaşabileceğiniz senaryolarla &lt;strong&gt;.NET 8&lt;/strong&gt; ve &lt;strong&gt;C#&lt;/strong&gt;&#39;ı en verimli şekilde kullanmanızı sağlamak.&lt;/p&gt;&lt;h2&gt;Modern Yazılım Geliştirme Pratikleri&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;.NET 8&lt;/strong&gt;’in sunduğu yenilikler ve performans iyileştirmeleri, modern yazılım geliştirme dünyasında oldukça önemli bir yer tutuyor. Özellikle, platformlar arası geliştirme yetenekleri, asenkron programlama desteği ve microservices mimarisi gibi konular, bugün yazılım geliştiren herkesin bilmesi gereken temel taşlar haline geldi. Bu seride, bu konuların nasıl uygulanacağını ve projelerinizde nasıl hayata geçirebileceğinizi birlikte keşfedeceğiz. Ayrıca, işin mutfağına inip, hangi yöntemlerin ve araçların yazılımlarınızı daha stabil, güvenli ve performanslı hale getirdiğini öğreneceğiz.&lt;/p&gt;&lt;h2&gt;Yenilikleri Takip Etmenin Önemi&lt;/h2&gt;&lt;p&gt;Yazılım dünyasında başarıya ulaşmanın yolu, sürekli olarak öğrenmek ve yenilikleri takip etmekten geçiyor. &lt;strong&gt;.NET 8&lt;/strong&gt;, bu süreçte size büyük kolaylıklar ve güçlü araçlar sunuyor. Performans optimizasyonlarından güvenlik protokollerine, veri yönetiminden test süreçlerine kadar birçok farklı konuya değineceğiz. Her biri, yazılım geliştirme sürecinde karşılaşabileceğiniz gerçek hayat problemlerine çözüm üretmek için tasarlandı.&lt;/p&gt;&lt;p&gt;Bu seri sonunda, .NET 8 ve C# konusunda kapsamlı bir bilgiye sahip olacağınız gibi, bu bilgileri projelerinize uygularken de kendinize olan güveniniz tam olacak.&lt;/p&gt;&lt;h2&gt;Karmaşıklığı Basitleştirmek&lt;/h2&gt;&lt;p&gt;Yolculuğumuz boyunca, teknik terimlerden kaçınmadan, ancak karmaşık anlatımları basitleştirerek konuları işleyeceğiz. Böylece hem yeni başlayanlar hem de deneyimli geliştiriciler için faydalı bir kaynak oluşturmayı hedefliyorum. Her makalede, işlenen konunun özüne inerek, pratik örneklerle detayları açıklayacağız. Hedefim, bu seriyi tamamladığınızda, &lt;strong&gt;.NET 8&lt;/strong&gt; ve &lt;strong&gt;C#&lt;/strong&gt;’ı sadece öğrenmekle kalmayıp, projelerinizde etkin bir şekilde kullanabileceğiniz hale gelmenizi sağlamak.&lt;/p&gt;&lt;h2&gt;Sonuç: Başlangıç Noktası&lt;/h2&gt;&lt;p&gt;Hazırsanız, &lt;strong&gt;.NET 8&lt;/strong&gt; ve &lt;strong&gt;C#&lt;/strong&gt; dünyasına birlikte adım atalım! Bu yolculuğun sonunda, yazılım projelerinizi bir üst seviyeye taşıyacak bilgi ve araçlara sahip olacaksınız. Hadi başlayalım!&lt;/p&gt;</description><link>http://www.alperkonuralp.com/2024/09/yolun-basnda-net-8-ve-c-yolculugumuz.html</link><author>noreply@blogger.com (Alper Konuralp)</author><thr:total>0</thr:total><georss:featurename>İstanbul, Türkiye</georss:featurename><georss:point>41.0082376 28.9783589</georss:point><georss:box>12.698003763821156 -6.1778911 69.318471436178839 64.1346089</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-1780488339008760914</guid><pubDate>Mon, 19 Oct 2020 10:31:00 +0000</pubDate><atom:updated>2020-10-19T13:31:13.814+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Alper Konuralp</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework Core</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework Core TPH</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Core</category><category domain="http://www.blogger.com/atom/ns#">OData</category><category domain="http://www.blogger.com/atom/ns#">OData Server</category><category domain="http://www.blogger.com/atom/ns#">OData WebApi</category><category domain="http://www.blogger.com/atom/ns#">Project OData Server</category><category domain="http://www.blogger.com/atom/ns#">Table per Hierarchy</category><category domain="http://www.blogger.com/atom/ns#">TPH</category><title>OData Server Serisi - B013 - Örnekler İçin Yeni Düzenleme</title><description>&lt;p&gt;
&lt;span&gt;OData Server Serisi - B013 - Örnekler İçin Yeni Düzenleme | OData Server Series - E013 - New Arrangement for Samples&amp;nbsp;| OData Server Series - E013 - Neue Anordnung für Beispiele&amp;nbsp;| Série de serveurs OData - E013 - Nouvel arrangement pour les échantillons&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Part 1: &lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/dQhjIJPik1c&quot; width=&quot;320&quot; youtube-src-id=&quot;dQhjIJPik1c&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Part 2:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;
&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;Merhaba bu seride bir OData Server geliştirirken, yaşadıklarımı sizlerle paylaşmak istiyorum. Microsoft .Net Core 3.1 ve C# kullanarak geliştireceğim bu projeyi bütün adımlarıyla sizlerle paylaşacağım.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bu 13. bölümde, Örneklerimizde daha karmaşık işler yapabilmek için varlıklarımızda bir düzenleme yapıyoruz. Bu sırada TPH (Table per Hierarchy) nedir onu inceliyoruz. Entity Framework Core&#39;da nasıl kullanıldığını görüyoruz.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bölüm Linkleri :&lt;/div&gt;&lt;div&gt;1. Inheritance On Entity Framework Core :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-US/ef/core/modeling/inheritance&quot;&gt;https://docs.microsoft.com/en-US/ef/core/modeling/inheritance&lt;/a&gt;&lt;/div&gt;&lt;div&gt;2. Entity Framework Core: Enums&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://medium.com/agilix/entity-framework-core-enums-ee0f8f4063f2&quot;&gt;https://medium.com/agilix/entity-framework-core-enums-ee0f8f4063f2&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Projemizin GitHub adresi :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Kanalım :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;İyi seyirler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;Hello, I want to share with you what I have experienced while developing an OData Server in this series. I will share with you all the steps of this project that I will develop using Microsoft .Net Core 3.1 and C #.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this 13th episode, we adjust our assets to do more complex work in our Samples. Meanwhile, we examine what is TPH (Table per Hierarchy). We see how it is used in Entity Framework Core.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Episode Links:&lt;/div&gt;&lt;div&gt;1. Inheritance On Entity Framework Core :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-US/ef/core/modeling/inheritance&quot;&gt;https://docs.microsoft.com/en-US/ef/core/modeling/inheritance&lt;/a&gt;&lt;/div&gt;&lt;div&gt;2. Entity Framework Core: Enums&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://medium.com/agilix/entity-framework-core-enums-ee0f8f4063f2&quot;&gt;https://medium.com/agilix/entity-framework-core-enums-ee0f8f4063f2&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Our Project GitHub address :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;My Channel :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have a good time.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;Hallo, ich möchte Ihnen mitteilen, was ich bei der Entwicklung eines OData-Servers in dieser Serie erlebt habe. Ich werde Ihnen alle Schritte dieses Projekts mitteilen, die ich mit Microsoft .Net Core 3.1 und C # entwickeln werde.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In dieser 13. Folge passen wir unser Vermögen an, um komplexere Arbeiten in unseren Samples auszuführen. In der Zwischenzeit untersuchen wir, was TPH (Tabelle pro Hierarchie) ist. Wir sehen, wie es in Entity Framework Core verwendet wird.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Episodenlinks:&lt;/div&gt;&lt;div&gt;1. Inheritance On Entity Framework Core :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-US/ef/core/modeling/inheritance&quot;&gt;https://docs.microsoft.com/en-US/ef/core/modeling/inheritance&lt;/a&gt;&lt;/div&gt;&lt;div&gt;2. Entity Framework Core: Enums&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://medium.com/agilix/entity-framework-core-enums-ee0f8f4063f2&quot;&gt;https://medium.com/agilix/entity-framework-core-enums-ee0f8f4063f2&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unsere Projekt-GitHub-Adresse: &lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Mein Kanal: &lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hab viel Spaß.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;Bonjour, je souhaite partager avec vous ce que j&#39;ai vécu lors du développement d&#39;un serveur OData dans cette série. Je partagerai avec vous toutes les étapes de ce projet que je développerai en utilisant Microsoft .Net Core 3.1 et C #.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Dans ce 13ème épisode, nous ajustons nos ressources pour effectuer un travail plus complexe dans nos échantillons. Pendant ce temps, nous examinons ce qu&#39;est TPH ( Table par hiérarchie). Nous voyons comment il est utilisé dans Entity Framework Core.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Liens d&#39;épisode:&lt;/div&gt;&lt;div&gt;1. Inheritance On Entity Framework Core :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-US/ef/core/modeling/inheritance&quot;&gt;https://docs.microsoft.com/en-US/ef/core/modeling/inheritance&lt;/a&gt;&lt;/div&gt;&lt;div&gt;2. Entity Framework Core: Enums&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://medium.com/agilix/entity-framework-core-enums-ee0f8f4063f2&quot;&gt;https://medium.com/agilix/entity-framework-core-enums-ee0f8f4063f2&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Adresse de notre projet GitHub: &lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Ma chaîne: &lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Amusez-vous bien.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;Music: &lt;a href=&quot;https://www.bensound.com/&quot;&gt;https://www.bensound.com&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Intro : Logo PA&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&quot;&gt;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Outro :&amp;nbsp; EnzeeFX&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/EnzeeFX&quot;&gt;https://www.youtube.com/c/EnzeeFX&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tags :&amp;nbsp;&lt;/div&gt;&lt;div&gt;Project OData Server, OData, OData Server, Alper Konuralp, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;Core, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://asp.net/&quot;&gt;Asp.Net&lt;/a&gt;&amp;nbsp;Core, OData WebApi, Entity Framework Core, TPH, Entity Framework Core TPH, Table per Hierarchy&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description><link>http://www.alperkonuralp.com/2020/10/odata-server-serisi-b013-ornekler-icin.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/dQhjIJPik1c/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-2988787506253833667</guid><pubDate>Mon, 19 Oct 2020 10:28:00 +0000</pubDate><atom:updated>2020-10-19T13:28:53.399+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Alper Konuralp</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Core</category><category domain="http://www.blogger.com/atom/ns#">OData</category><category domain="http://www.blogger.com/atom/ns#">OData Server</category><category domain="http://www.blogger.com/atom/ns#">OData WebApi</category><category domain="http://www.blogger.com/atom/ns#">Project OData Server</category><title>OData Server Serisi - B012 - Bugün ve Gelecek</title><description>&lt;p&gt;&lt;span&gt;OData Server Serisi - B012 - Bugün ve Gelecek | OData Server Series - E012 - Today &amp;amp; The Future&amp;nbsp;| OData Server Series - E012 - Heute und die Zukunft&amp;nbsp;| Série de serveurs OData - E012 - Aujourd&#39;hui et l&#39;avenir&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/qiNB1DVgqoY&quot; width=&quot;320&quot; youtube-src-id=&quot;qiNB1DVgqoY&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;
&lt;span&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;Merhaba bu seride bir OData Server geliştirirken, yaşadıklarımı sizlerle paylaşmak istiyorum. Microsoft .Net Core 3.1 ve C# kullanarak geliştireceğim bu projeyi bütün adımlarıyla sizlerle paylaşacağım.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bu 12. bölümde,&amp;nbsp;sizlerle OData Serisi ve Project OData Series Projesi ile ilgili gelecek planlarımı ve şu anki çalışmalarım ile ilgili bilgiler paylaşmak istiyorum.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Projemizin GitHub adresi :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Kanalım :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;İyi seyirler.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;Hello, I want to share with you what I have experienced while developing an OData Server in this series. I will share with you all the steps of this project that I will develop using Microsoft .Net Core 3.1 and C #.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this 12th episode, I would like to share with you information about my future plans for the OData Series and Project OData Series Project and my current work.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Our Project GitHub address :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;My Channel :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have a good time.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;Hallo, ich möchte Ihnen mitteilen, was ich bei der Entwicklung eines OData-Servers in dieser Serie erlebt habe. Ich werde Ihnen alle Schritte dieses Projekts mitteilen, die ich mit Microsoft .Net Core 3.1 und C # entwickeln werde.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In dieser 12. Folge möchte ich Ihnen Informationen über meine zukünftigen Pläne für die OData-Serie und das Projekt OData Series Project und meine aktuelle Arbeit mitteilen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unsere Projekt-GitHub-Adresse: &lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Mein Kanal: &lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hab viel Spaß.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;Bonjour, je souhaite partager avec vous ce que j&#39;ai vécu lors du développement d&#39;un serveur OData dans cette série. Je partagerai avec vous toutes les étapes de ce projet que je développerai en utilisant Microsoft .Net Core 3.1 et C #.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Dans ce 12ème épisode, je voudrais partager avec vous des informations sur mes projets futurs pour la série OData et le projet OData Series Project et mon travail actuel.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Adresse de notre projet GitHub: &lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Ma chaîne: &lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Amusez-vous bien.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;Music: &lt;a href=&quot;https://www.bensound.com/&quot;&gt;https://www.bensound.com&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Intro : Logo PA&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&quot;&gt;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Outro :&amp;nbsp; EnzeeFX&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/EnzeeFX&quot;&gt;https://www.youtube.com/c/EnzeeFX&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tags :&amp;nbsp;&lt;/div&gt;&lt;div&gt;Project OData Server, OData, OData Server, Alper Konuralp, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;Core, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://asp.net/&quot;&gt;Asp.Net&lt;/a&gt;&amp;nbsp;Core, OData WebApi, Entity Framework Core,&lt;/div&gt;&lt;/span&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;

&lt;/p&gt;</description><link>http://www.alperkonuralp.com/2020/10/odata-server-serisi-b012-bugun-ve.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/qiNB1DVgqoY/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-395389499697675220</guid><pubDate>Mon, 19 Oct 2020 10:27:00 +0000</pubDate><atom:updated>2020-10-19T13:27:08.744+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Alper Konuralp</category><category domain="http://www.blogger.com/atom/ns#">Castle Logging Facility</category><category domain="http://www.blogger.com/atom/ns#">Castle Windsor</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework Core</category><category domain="http://www.blogger.com/atom/ns#">Log4net</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Extensions.Logging</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Core</category><category domain="http://www.blogger.com/atom/ns#">OData</category><category domain="http://www.blogger.com/atom/ns#">OData Server</category><category domain="http://www.blogger.com/atom/ns#">OData WebApi</category><title>OData Server Serisi - B011 - Loglama</title><description>&lt;p&gt;&lt;span&gt;OData Server Serisi - B011 - Loglama | OData Server Series - E011 - Logging&amp;nbsp;| OData Server Series - E011 - Protokollierung&amp;nbsp;| Série de serveurs OData - E011 - Journalisation&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/kiAxzTAwHVE&quot; width=&quot;320&quot; youtube-src-id=&quot;kiAxzTAwHVE&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;
&lt;span&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;Merhaba bu seride bir OData Server geliştirirken, yaşadıklarımı sizlerle paylaşmak istiyorum. Microsoft .Net Core 3.1 ve C# kullanarak geliştireceğim bu projeyi bütün adımlarıyla sizlerle paylaşacağım.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bu 11. bölümde, geliştirme sırasında birkaç kere bizi zorlayan logların çalışmaması problemini çözüyoruz. Bunu yaparken &lt;a href=&quot;http://asp.net/&quot;&gt;Asp.Net&lt;/a&gt;&amp;nbsp;Core, Log4Net, Castle Windsor, Castle Logging Facility ve Microsoft.Extensions.Logging başlıklarını inceledik.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bölüm Linkleri :&lt;/div&gt;&lt;div&gt;1. Castle Logging Facility Source Code :&amp;nbsp;&lt;a href=&quot;https://github.com/castleproject/Windsor/blob/master/src/Castle.Facilities.Logging/LoggingFacility.cs&quot;&gt;https://github.com/castleproject/Windsor/blob/master/src/Castle.Facilities.Logging/LoggingFacility.cs&lt;/a&gt;&lt;/div&gt;&lt;div&gt;2. Microsoft.Extensions.Logging.Log4Net.AspNetCore&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.nuget.org/packages/Microsoft.Extensions.Logging.Log4Net.AspNetCore/&quot;&gt;https://www.nuget.org/packages/Microsoft.Extensions.Logging.Log4Net.AspNetCore/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Projemizin GitHub adresi :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Kanalım :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;İyi seyirler.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;Hello, I want to share with you what I have experienced while developing an OData Server in this series. I will share with you all the steps of this project that I will develop using Microsoft .Net Core 3.1 and C #.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this episode 11, we solve the problem of logs not working, which has been forcing us several times during development. While doing this, we examined &lt;a href=&quot;http://asp.net/&quot;&gt;Asp.Net&lt;/a&gt; Core, Log4Net, Castle Windsor, Castle Logging Facility and Microsoft.Extensions.Logging.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Episode Links:&lt;/div&gt;&lt;div&gt;1. Castle Logging Facility Source Code :&amp;nbsp;&lt;a href=&quot;https://github.com/castleproject/Windsor/blob/master/src/Castle.Facilities.Logging/LoggingFacility.cs&quot;&gt;https://github.com/castleproject/Windsor/blob/master/src/Castle.Facilities.Logging/LoggingFacility.cs&lt;/a&gt;&lt;/div&gt;&lt;div&gt;2. Microsoft.Extensions.Logging.Log4Net.AspNetCore&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.nuget.org/packages/Microsoft.Extensions.Logging.Log4Net.AspNetCore/&quot;&gt;https://www.nuget.org/packages/Microsoft.Extensions.Logging.Log4Net.AspNetCore/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Our Project GitHub address :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;My Channel :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have a good time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;Hallo, ich möchte Ihnen mitteilen, was ich bei der Entwicklung eines OData-Servers in dieser Serie erlebt habe. Ich werde Ihnen alle Schritte dieses Projekts mitteilen, die ich mit Microsoft .Net Core 3.1 und C # entwickeln werde.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In dieser Episode 11 lösen wir das Problem, dass Protokolle nicht funktionieren, was uns während der Entwicklung mehrmals gezwungen hat. Dabei haben wir &lt;a href=&quot;http://asp.net/&quot;&gt;Asp.Net&lt;/a&gt; Core, Log4Net, Castle Windsor, Castle Logging Facility und Microsoft.Extensions.Logging untersucht.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Episodenlinks:&lt;/div&gt;&lt;div&gt;1. Castle Logging Facility Source Code :&amp;nbsp;&lt;a href=&quot;https://github.com/castleproject/Windsor/blob/master/src/Castle.Facilities.Logging/LoggingFacility.cs&quot;&gt;https://github.com/castleproject/Windsor/blob/master/src/Castle.Facilities.Logging/LoggingFacility.cs&lt;/a&gt;&lt;/div&gt;&lt;div&gt;2. Microsoft.Extensions.Logging.Log4Net.AspNetCore&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.nuget.org/packages/Microsoft.Extensions.Logging.Log4Net.AspNetCore/&quot;&gt;https://www.nuget.org/packages/Microsoft.Extensions.Logging.Log4Net.AspNetCore/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unsere Projekt-GitHub-Adresse: &lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Mein Kanal: &lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hab viel Spaß.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;Bonjour, je souhaite partager avec vous ce que j&#39;ai vécu lors du développement d&#39;un serveur OData dans cette série. Je partagerai avec vous toutes les étapes de ce projet que je développerai en utilisant Microsoft .Net Core 3.1 et C #.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Dans cet épisode 11, nous résolvons le problème des logs qui ne fonctionnent pas, ce qui nous a obligé à plusieurs reprises au cours du développement. Ce faisant, nous avons examiné &lt;a href=&quot;http://asp.net/&quot;&gt;Asp.Net&lt;/a&gt; Core, Log4Net, Castle Windsor, Castle Logging Facility et Microsoft.Extensions.Logging.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Liens d&#39;épisode:&lt;/div&gt;&lt;div&gt;1. Castle Logging Facility Source Code :&amp;nbsp;&lt;a href=&quot;https://github.com/castleproject/Windsor/blob/master/src/Castle.Facilities.Logging/LoggingFacility.cs&quot;&gt;https://github.com/castleproject/Windsor/blob/master/src/Castle.Facilities.Logging/LoggingFacility.cs&lt;/a&gt;&lt;/div&gt;&lt;div&gt;2. Microsoft.Extensions.Logging.Log4Net.AspNetCore&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.nuget.org/packages/Microsoft.Extensions.Logging.Log4Net.AspNetCore/&quot;&gt;https://www.nuget.org/packages/Microsoft.Extensions.Logging.Log4Net.AspNetCore/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Adresse de notre projet GitHub: &lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Ma chaîne: &lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Amusez-vous bien.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;Music: &lt;a href=&quot;https://www.bensound.com/&quot;&gt;https://www.bensound.com&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Intro : Logo PA&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&quot;&gt;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Outro :&amp;nbsp; EnzeeFX&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/EnzeeFX&quot;&gt;https://www.youtube.com/c/EnzeeFX&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tags :&amp;nbsp;&lt;/div&gt;&lt;div&gt;OData, OData Server, Alper Konuralp, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;Core, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://asp.net/&quot;&gt;Asp.Net&lt;/a&gt;&amp;nbsp;Core, OData WebApi, Entity Framework Core, Log4Net, Castle Windsor, Castle Logging Facility, Microsoft.Extensions.Logging,&amp;nbsp;Microsoft.Extensions.Logging.Log4Net.AspNetCore&lt;/div&gt;&lt;/span&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;

&lt;/p&gt;</description><link>http://www.alperkonuralp.com/2020/10/odata-server-serisi-b011-loglama.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/kiAxzTAwHVE/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-4693375526546448934</guid><pubDate>Mon, 19 Oct 2020 10:23:00 +0000</pubDate><atom:updated>2020-10-19T13:23:58.092+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Alper Konuralp</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework Core</category><category domain="http://www.blogger.com/atom/ns#">HTTP PATCH</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Core</category><category domain="http://www.blogger.com/atom/ns#">OData</category><category domain="http://www.blogger.com/atom/ns#">OData Server</category><category domain="http://www.blogger.com/atom/ns#">OData WebApi</category><title>OData Server Serisi - B010 - OData ile Post ve Put (2)</title><description>&lt;p&gt;&lt;span&gt;OData Server Serisi - B010 - OData ile Post ve Put (2) | OData Server Series - E010 - OData with&amp;nbsp;Post &amp;amp; Put (2)&amp;nbsp;| OData Server Series - E010 - OData mit Post &amp;amp; Put (2)&amp;nbsp;| Série de serveurs OData - E010 - OData avec Post &amp;amp; Put (2)&lt;/span&gt;

&lt;/p&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/_4V7nn1DyHw&quot; width=&quot;320&quot; youtube-src-id=&quot;_4V7nn1DyHw&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;Merhaba bu seride bir OData Server geliştirirken, yaşadıklarımı sizlerle paylaşmak istiyorum. Microsoft .Net Core 3.1 ve C# kullanarak geliştireceğim bu projeyi bütün adımlarıyla sizlerle paylaşacağım.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bu 10. bölümde, OData Kontrolörlerimizde yazdığımız Post ve Put metotları içindeki bir probleme el atıyoruz. Esasında bu, ilk yazdığımızda eksik bıraktığımız bir konu idi. Böylece ilişkili entity&#39;leri de beraber kaydedip, değiştirebileceğiz.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bölüm Linkleri :&lt;/div&gt;&lt;div&gt;1. Routing Conventions in &lt;a href=&quot;http://asp.net/&quot;&gt;ASP.NET&lt;/a&gt; Web API 2 Odata :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&quot;&gt;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&lt;/a&gt;&lt;/div&gt;&lt;div&gt;2. DynamicEdmModelCreation :&amp;nbsp;&lt;a href=&quot;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&quot;&gt;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&lt;/a&gt;&lt;/div&gt;&lt;div&gt;3. Operations (OData Version 2.0) :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/documentation/odata-version-2-0/operations/&quot;&gt;https://www.odata.org/documentation/odata-version-2-0/operations/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;4. Understand OData in 6 steps :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/getting-started/understand-odata-in-6-steps/&quot;&gt;https://www.odata.org/getting-started/understand-odata-in-6-steps/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Projemizin GitHub adresi :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Kanalım :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;İyi seyirler.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;span&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;Hello, I want to share with you what I have experienced while developing an OData Server in this series. I will share with you all the steps of this project that I will develop using Microsoft .Net Core 3.1 and C #.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this 10th episode, we address a problem in the Post and Put methods we wrote in our OData Controllers. In fact, this was a subject we left incomplete when we first wrote. Thus, we will be able to save and change associated entities together.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Episode Links:&lt;/div&gt;&lt;div&gt;1. Routing Conventions in &lt;a href=&quot;http://asp.net/&quot;&gt;ASP.NET&lt;/a&gt; Web API 2 Odata :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&quot;&gt;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&lt;/a&gt;&lt;/div&gt;&lt;div&gt;2. DynamicEdmModelCreation :&amp;nbsp;&lt;a href=&quot;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&quot;&gt;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&lt;/a&gt;&lt;/div&gt;&lt;div&gt;3. Operations (OData Version 2.0) :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/documentation/odata-version-2-0/operations/&quot;&gt;https://www.odata.org/documentation/odata-version-2-0/operations/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;4. Understand OData in 6 steps :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/getting-started/understand-odata-in-6-steps/&quot;&gt;https://www.odata.org/getting-started/understand-odata-in-6-steps/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Our Project GitHub address :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;My Channel :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have a good time.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Hallo, ich möchte Ihnen mitteilen, was ich bei der Entwicklung eines OData-Servers in dieser Serie erlebt habe. Ich werde Ihnen alle Schritte dieses Projekts mitteilen, die ich mit Microsoft .Net Core 3.1 und C # entwickeln werde.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In dieser 10. Folge behandeln wir ein Problem in den Post- und Put-Methoden, die wir in unseren OData-Controllern geschrieben haben. Tatsächlich war dies ein Thema, das wir beim ersten Schreiben unvollständig gelassen haben. Auf diese Weise können wir zugeordnete Entitäten gemeinsam speichern und ändern.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Episodenlinks:&lt;/div&gt;&lt;div&gt;1. Routing Conventions in &lt;a href=&quot;http://asp.net/&quot;&gt;ASP.NET&lt;/a&gt; Web API 2 Odata :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&quot;&gt;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&lt;/a&gt;&lt;/div&gt;&lt;div&gt;2. DynamicEdmModelCreation :&amp;nbsp;&lt;a href=&quot;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&quot;&gt;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&lt;/a&gt;&lt;/div&gt;&lt;div&gt;3. Operations (OData Version 2.0) :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/documentation/odata-version-2-0/operations/&quot;&gt;https://www.odata.org/documentation/odata-version-2-0/operations/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;4. Understand OData in 6 steps :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/getting-started/understand-odata-in-6-steps/&quot;&gt;https://www.odata.org/getting-started/understand-odata-in-6-steps/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unsere Projekt-GitHub-Adresse: &lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Mein Kanal: &lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hab viel Spaß.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Bonjour, je souhaite partager avec vous ce que j&#39;ai vécu lors du développement d&#39;un serveur OData dans cette série. Je partagerai avec vous toutes les étapes de ce projet que je développerai en utilisant Microsoft .Net Core 3.1 et C #.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Dans ce 10ème épisode, nous abordons un problème dans les méthodes Post and Put que nous avons écrites dans nos contrôleurs OData. En fait, c&#39;était un sujet que nous avons laissé incomplet lorsque nous avons écrit pour la première fois. Ainsi, nous pourrons enregistrer et modifier ensemble les entités associées.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Liens d&#39;épisode:&lt;/div&gt;&lt;div&gt;1. Routing Conventions in &lt;a href=&quot;http://asp.net/&quot;&gt;ASP.NET&lt;/a&gt; Web API 2 Odata :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&quot;&gt;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&lt;/a&gt;&lt;/div&gt;&lt;div&gt;2. DynamicEdmModelCreation :&amp;nbsp;&lt;a href=&quot;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&quot;&gt;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&lt;/a&gt;&lt;/div&gt;&lt;div&gt;3. Operations (OData Version 2.0) :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/documentation/odata-version-2-0/operations/&quot;&gt;https://www.odata.org/documentation/odata-version-2-0/operations/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;4. Understand OData in 6 steps :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/getting-started/understand-odata-in-6-steps/&quot;&gt;https://www.odata.org/getting-started/understand-odata-in-6-steps/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Adresse de notre projet GitHub: &lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Ma chaîne: &lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Amusez-vous bien.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Music: &lt;a href=&quot;https://www.bensound.com/&quot;&gt;https://www.bensound.com&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Intro : Logo PA&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&quot;&gt;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Outro :&amp;nbsp; EnzeeFX&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/EnzeeFX&quot;&gt;https://www.youtube.com/c/EnzeeFX&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tags :&amp;nbsp;&lt;/div&gt;&lt;div&gt;OData, OData Server, Alper Konuralp, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;Core, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://asp.net/&quot;&gt;Asp.Net&lt;/a&gt;&amp;nbsp;Core, OData WebApi, Entity Framework Core, HTTP PATCH&lt;/div&gt;&lt;/span&gt;&amp;nbsp; &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;</description><link>http://www.alperkonuralp.com/2020/10/odata-server-serisi-b010-odata-ile-post.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/_4V7nn1DyHw/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-5803889918936855696</guid><pubDate>Thu, 08 Oct 2020 07:22:00 +0000</pubDate><atom:updated>2020-10-08T10:22:22.733+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Asp.Net Core Docker Alpine Linux</category><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">Docker Alpine Linux</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><title>Asp.Net 3.x Docker Alpine imajlarındaki TimeZone Problemi</title><description>&lt;p&gt;&amp;nbsp;Merhaba,&lt;/p&gt;&lt;p&gt;&amp;nbsp;Asp.Net Core 3.1 ile geliştirdiğimiz projemizi Docker ile OpenShift üzerinde çalıştırıyoruz. Bu projemizi teste aldığımızda farkettiğimiz bir problemi sizinle paylaşmak istiyorum.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Bildiğiniz gibi işletim sistemleri TimeZone ile ilgili bilgileri içlerinde barındırırlar. Bu sayede uygulamalar bu bilgileri kullanıp timezone ile ilgili bilgi alabilirler. Ancak Alpine linux versiyonları kırpılmış versiyonlar olduklarından default olarak bu paketlere sahip olmuyorlar. Bu durumu çözmek için DockerFile&#39;a FROM kısmının altına şu satırı eklemek yeterli oluyor.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-alpine&lt;br /&gt;&lt;br /&gt;&lt;b&gt;RUN apk add --no-cache tzdata&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Bu sayede TZConverter gibi kütüphaneler çalışır hale gelmekte. &lt;br /&gt;&lt;/p&gt;</description><link>http://www.alperkonuralp.com/2020/10/aspnet-3x-docker-alpine-imajlarndaki.html</link><author>noreply@blogger.com (Alper Konuralp)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-6119571157322391116</guid><pubDate>Sun, 04 Oct 2020 19:58:00 +0000</pubDate><atom:updated>2020-10-04T22:58:12.153+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Alper Konuralp</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework Core</category><category domain="http://www.blogger.com/atom/ns#">HTTP PATCH</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Core</category><category domain="http://www.blogger.com/atom/ns#">OData</category><category domain="http://www.blogger.com/atom/ns#">OData Server</category><category domain="http://www.blogger.com/atom/ns#">OData WebApi</category><title>OData Server Serisi - B009 - OData ile Patch</title><description>&lt;p&gt;&lt;span&gt;OData Server Serisi - B009 - OData ile Patch | OData Server Series - E009 - OData with Patch&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/-tuCttiav7w&quot; width=&quot;320&quot; youtube-src-id=&quot;-tuCttiav7w&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;&lt;div&gt;Merhaba bu seride bir OData Server geliştirirken, yaşadıklarımı sizlerle paylaşmak istiyorum. Microsoft .Net Core 3.1 ve C# kullanarak geliştireceğim bu projeyi bütün adımlarıyla sizlerle paylaşacağım.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bu 9. bölümde, OData Kontrolörlerimizde olmasını isteyeceğimiz &quot;Patch&quot; özelliğini inceliyoruz. Ancak buna geçmeden önce, bir önceki bölümde &quot;ProductController&quot; üzerinde yapmayı unuttuğumuz bazı işleri tamamlayacağız.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bölüm Linkleri :&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Routing Conventions in ASP.NET Web API 2 Odata :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&quot;&gt;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;DynamicEdmModelCreation :&amp;nbsp;&lt;a href=&quot;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&quot;&gt;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Operations (OData Version 2.0) :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/documentation/odata-version-2-0/operations/&quot;&gt;https://www.odata.org/documentation/odata-version-2-0/operations/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Understand OData in 6 steps :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/getting-started/understand-odata-in-6-steps/&quot;&gt;https://www.odata.org/getting-started/understand-odata-in-6-steps/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Projemizin GitHub adresi :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Kanalım :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;İyi seyirler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;|&amp;nbsp;&lt;/div&gt;&lt;div&gt;Hello, I want to share with you what I have experienced while developing an OData Server in this series. I will share with you all the steps of this project that I will develop using Microsoft .Net Core 3.1 and C #.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this 9th episode, we examine the &quot;Patch&quot; feature that we want to have on our OData Controllers. But before we get to that, we&#39;ll complete some work we forgot to do on &quot;ProductController&quot; in the previous episode.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Episode Linkleri :&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Routing Conventions in &lt;a href=&quot;http://asp.net/&quot;&gt;ASP.NET&lt;/a&gt; Web API 2 Odata :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&quot;&gt;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;DynamicEdmModelCreation :&amp;nbsp;&lt;a href=&quot;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&quot;&gt;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Operations (OData Version 2.0) :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/documentation/odata-version-2-0/operations/&quot;&gt;https://www.odata.org/documentation/odata-version-2-0/operations/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Understand OData in 6 steps :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/getting-started/understand-odata-in-6-steps/&quot;&gt;https://www.odata.org/getting-started/understand-odata-in-6-steps/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Out Project GitHub address :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;My Channel :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have a good time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Music: &lt;a href=&quot;https://www.bensound.com/&quot;&gt;https://www.bensound.com&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Intro : Logo PA&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&quot;&gt;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Outro :&amp;nbsp; EnzeeFX&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/EnzeeFX&quot;&gt;https://www.youtube.com/c/EnzeeFX&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tags :&amp;nbsp;&lt;/div&gt;&lt;div&gt;OData, OData Server, Alper Konuralp, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;Core, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://asp.net/&quot;&gt;Asp.Net&lt;/a&gt;&amp;nbsp;Core, OData WebApi, Entity Framework Core, HTTP PATCH&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;</description><link>http://www.alperkonuralp.com/2020/10/odata-server-serisi-b009-odata-ile-patch.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/-tuCttiav7w/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-5799328612911902583</guid><pubDate>Sun, 04 Oct 2020 19:55:00 +0000</pubDate><atom:updated>2020-10-04T22:56:11.219+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Alper Konuralp</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework Core</category><category domain="http://www.blogger.com/atom/ns#">HTTP DELETE</category><category domain="http://www.blogger.com/atom/ns#">HTTP POST</category><category domain="http://www.blogger.com/atom/ns#">HTTP PUT</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Core</category><category domain="http://www.blogger.com/atom/ns#">OData</category><category domain="http://www.blogger.com/atom/ns#">OData Server</category><category domain="http://www.blogger.com/atom/ns#">OData WebApi</category><title>OData Server Serisi - B008 - OData ile Post, Put ve Delete</title><description>&lt;span&gt;OData Server Serisi - B008 - OData ile Post, Put ve Delete | OData Server Series - E008 - OData with Post, Put &amp;amp; Delete&lt;/span&gt;&amp;nbsp;&lt;p&gt;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/-1PZrTNoY0E&quot; width=&quot;320&quot; youtube-src-id=&quot;-1PZrTNoY0E&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Merhaba bu seride bir OData Server geliştirirken, yaşadıklarımı sizlerle paylaşmak istiyorum. Microsoft .Net Core 3.1 ve C# kullanarak geliştireceğim bu projeyi bütün adımlarıyla sizlerle paylaşacağım.&amp;nbsp;&lt;/p&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bu 8. bölümde, OData Kontrolörlerimizde olmasını isteyeceğimiz üç özelliği inceliyoruz. Bu bölümde yazdıklarımız ile beraber OData Kontrolörlerimiz CRUD işlemlerinin tamamını yapabilecekler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bölüm Linkleri :&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Routing Conventions in ASP.NET Web API 2 Odata :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&quot;&gt;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;DynamicEdmModelCreation :&amp;nbsp;&lt;a href=&quot;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&quot;&gt;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Operations (OData Version 2.0) :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/documentation/odata-version-2-0/operations/&quot;&gt;https://www.odata.org/documentation/odata-version-2-0/operations/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Understand OData in 6 steps :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/getting-started/understand-odata-in-6-steps/&quot;&gt;https://www.odata.org/getting-started/understand-odata-in-6-steps/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Projemizin GitHub adresi :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Kanalım :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;İyi seyirler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;|&amp;nbsp;&lt;/div&gt;&lt;div&gt;Hello, I want to share with you what I have experienced while developing an OData Server in this series. I will share with you all the steps of this project that I will develop using Microsoft .Net Core 3.1 and C #.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this episode 8, we examine three features we would like to have in our OData Controllers.&amp;nbsp; With what we have written in this episode, our OData Controllers will be able to do all of the CRUD operations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Episode Linkleri :&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Routing Conventions in &lt;a href=&quot;http://asp.net/&quot;&gt;ASP.NET&lt;/a&gt; Web API 2 Odata :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&quot;&gt;https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;DynamicEdmModelCreation :&amp;nbsp;&lt;a href=&quot;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&quot;&gt;https://github.com/OData/ODataSamples/tree/master/WebApiCore/DynamicEdmModelCreation&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Operations (OData Version 2.0) :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/documentation/odata-version-2-0/operations/&quot;&gt;https://www.odata.org/documentation/odata-version-2-0/operations/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Understand OData in 6 steps :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/getting-started/understand-odata-in-6-steps/&quot;&gt;https://www.odata.org/getting-started/understand-odata-in-6-steps/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Out Project GitHub address :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;My Channel :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have a good time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Music: &lt;a href=&quot;https://www.bensound.com/&quot;&gt;https://www.bensound.com&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Intro : Logo PA&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&quot;&gt;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Outro :&amp;nbsp; EnzeeFX&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/EnzeeFX&quot;&gt;https://www.youtube.com/c/EnzeeFX&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tags :&amp;nbsp;&lt;/div&gt;&lt;div&gt;OData, OData Server, Alper Konuralp, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;Core, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://asp.net/&quot;&gt;Asp.Net&lt;/a&gt;&amp;nbsp;Core, OData WebApi, Entity Framework Core, HTTP POST, HTTP PUT, HTTP DELETE&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;</description><link>http://www.alperkonuralp.com/2020/10/odata-server-serisi-b008-odata-ile-post.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/-1PZrTNoY0E/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-6046051997420004801</guid><pubDate>Sun, 04 Oct 2020 19:53:00 +0000</pubDate><atom:updated>2020-10-04T22:53:47.693+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Alper Konuralp</category><category domain="http://www.blogger.com/atom/ns#">Dynamic Controllers</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Core</category><category domain="http://www.blogger.com/atom/ns#">OData</category><category domain="http://www.blogger.com/atom/ns#">OData Server</category><category domain="http://www.blogger.com/atom/ns#">OData WebApi</category><title>OData Server Serisi - B007 - OData ile Select</title><description>&lt;p&gt;&amp;nbsp;
&lt;span&gt;OData Server Serisi - B007 - OData ile Select | OData Server Series - E007 - OData with Select&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/H2o2YvXvD78&quot; width=&quot;320&quot; youtube-src-id=&quot;H2o2YvXvD78&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;
&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;Merhaba bu seride bir OData Server geliştirirken, yaşadıklarımı sizlerle paylaşmak istiyorum. Microsoft .Net Core 3.1 ve C# kullanarak geliştireceğim bu projeyi bütün adımlarıyla sizlerle paylaşacağım.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bu 7. bölümde, OData Kontrolörlerimizde olmasını isteyeceğimiz iki özelliği inceliyoruz. Böylece OData kontrolörlerimiz daha yetenekli olacaklar.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Projemizin GitHub adresi :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Kanalım :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;İyi seyirler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;|&amp;nbsp;&lt;/div&gt;&lt;div&gt;Hello, I want to share with you what I have experienced while developing an OData Server in this series. I will share with you all the steps of this project that I will develop using Microsoft .Net Core 3.1 and C #.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this episode 7, we examine two features we would like to have in our OData Controllers. Thus, our OData controllers will be more capable.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Out Project GitHub address :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;My Channel :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have a good time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Music: &lt;a href=&quot;https://www.bensound.com/&quot;&gt;https://www.bensound.com&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Intro : Logo PA&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&quot;&gt;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Outro :&amp;nbsp; EnzeeFX&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/EnzeeFX&quot;&gt;https://www.youtube.com/c/EnzeeFX&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tags :&amp;nbsp;&lt;/div&gt;&lt;div&gt;OData, OData Server, Alper Konuralp, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;Core, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://asp.net/&quot;&gt;Asp.Net&lt;/a&gt;&amp;nbsp;Core, OData WebApi, Entity Framework Core, Dynamic Controllers&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;</description><link>http://www.alperkonuralp.com/2020/10/odata-server-serisi-b007-odata-ile.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/H2o2YvXvD78/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-3547999727005458612</guid><pubDate>Sun, 04 Oct 2020 19:51:00 +0000</pubDate><atom:updated>2020-10-04T22:51:34.160+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Alper Konuralp</category><category domain="http://www.blogger.com/atom/ns#">Dynamic Controllers</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Core</category><category domain="http://www.blogger.com/atom/ns#">OData</category><category domain="http://www.blogger.com/atom/ns#">OData Server</category><category domain="http://www.blogger.com/atom/ns#">OData WebApi</category><title>OData Server Serisi - B006 - Dinamik Kontrolörler</title><description>&lt;p&gt;&amp;nbsp;
&lt;span&gt;OData Server Serisi - B006 - Dinamik Kontrolörler | OData Server Series - E006 - Dynamic Controllers&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/ZzXXW9ReDrg&quot; width=&quot;320&quot; youtube-src-id=&quot;ZzXXW9ReDrg&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&amp;nbsp;
&lt;span&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;&lt;div&gt;Merhaba bu seride bir OData Server geliştirirken, yaşadıklarımı sizlerle paylaşmak istiyorum. Microsoft .Net Core 3.1 ve C# kullanarak geliştireceğim bu projeyi bütün adımlarıyla sizlerle paylaşacağım.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bu 6. bölümde projemize, projemizin en önemli parçalarından olan dinamik kod çalıştırma ile ilgileniyoruz. Yani çalışma zamanında string olarak hazırladığımız kodları derleyip, odata sunucumuzu bu dinamik kodlarla çalıştırıyoruz. Bu bölüm benim için en heyecan verici bölümlerden biri. Hadi ne duruyoruz, hemen başlayalım.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bölüm linkleri :&amp;nbsp;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Generic and dynamically generated controllers in ASP.NET Core MVC&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.strathweb.com/2018/04/generic-and-dynamically-generated-controllers-in-asp-net-core-mvc/&quot;&gt;https://www.strathweb.com/2018/04/generic-and-dynamically-generated-controllers-in-asp-net-core-mvc/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;ASP.Net Core register Controller at runtime&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://stackoverflow.com/questions/46156649/asp-net-core-register-controller-at-runtime&quot;&gt;https://stackoverflow.com/questions/46156649/asp-net-core-register-controller-at-runtime&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Generic controllers in ASP.Net Core&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.ben-morris.com/generic-controllers-in-asp-net-core/&quot;&gt;https://www.ben-morris.com/generic-controllers-in-asp-net-core/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Share controllers, views, Razor Pages and more with Application Parts :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-3.1&quot;&gt;https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-3.1&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;[ASP. Net core] to realize dynamic web API :&amp;nbsp;&lt;a href=&quot;https://developpaper.com/asp-net-core-to-realize-dynamic-web-api/&quot;&gt;https://developpaper.com/asp-net-core-to-realize-dynamic-web-api/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Projemizin GitHub adresi :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Kanalım :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;İyi seyirler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;|&amp;nbsp;&lt;/div&gt;&lt;div&gt;Hello, I want to share with you what I have experienced while developing an OData Server in this series. I will share with you all the steps of this project that I will develop using Microsoft .Net Core 3.1 and C #.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This 6th section is about &quot;dynamic code execution&quot;, one of the most important parts of our project. In other words, we compile the codes we have prepared as strings at runtime and run our OData server with these dynamic codes. This episode is one of the most exciting episodes for me. Come on, let&#39;s get started right away.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Section links:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Generic and dynamically generated controllers in &lt;a href=&quot;http://asp.net/&quot;&gt;ASP.NET&lt;/a&gt; Core MVC&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.strathweb.com/2018/04/generic-and-dynamically-generated-controllers-in-asp-net-core-mvc/&quot;&gt;https://www.strathweb.com/2018/04/generic-and-dynamically-generated-controllers-in-asp-net-core-mvc/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;a href=&quot;http://asp.net/&quot;&gt;ASP.Net&lt;/a&gt; Core register Controller at runtime&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://stackoverflow.com/questions/46156649/asp-net-core-register-controller-at-runtime&quot;&gt;https://stackoverflow.com/questions/46156649/asp-net-core-register-controller-at-runtime&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Generic controllers in &lt;a href=&quot;http://asp.net/&quot;&gt;ASP.Net&lt;/a&gt; Core&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://www.ben-morris.com/generic-controllers-in-asp-net-core/&quot;&gt;https://www.ben-morris.com/generic-controllers-in-asp-net-core/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Share controllers, views, Razor Pages and more with Application Parts :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-3.1&quot;&gt;https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-3.1&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;[ASP. Net core] to realize dynamic web API :&amp;nbsp;&lt;a href=&quot;https://developpaper.com/asp-net-core-to-realize-dynamic-web-api/&quot;&gt;https://developpaper.com/asp-net-core-to-realize-dynamic-web-api/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Out Project GitHub address :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;My Channel :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have a good time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Music: &lt;a href=&quot;https://www.bensound.com/&quot;&gt;https://www.bensound.com&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Intro : Logo PA&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&quot;&gt;https://www.youtube.com/channel/UC9YpORZEI7TTaAMtmBL8Yzw&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Outro :&amp;nbsp; EnzeeFX&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/EnzeeFX&quot;&gt;https://www.youtube.com/c/EnzeeFX&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tags :&amp;nbsp;&lt;/div&gt;&lt;div&gt;OData, OData Server, Alper Konuralp, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;Core, &lt;a href=&quot;http://microsoft.net/&quot;&gt;Microsoft.Net&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://asp.net/&quot;&gt;Asp.Net&lt;/a&gt;&amp;nbsp;Core, OData WebApi, Entity Framework Core, Dynamic Controllers&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;

&lt;p&gt;&lt;/p&gt;</description><link>http://www.alperkonuralp.com/2020/10/odata-server-serisi-b006-dinamik.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/ZzXXW9ReDrg/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-5548371032660399954</guid><pubDate>Sun, 27 Sep 2020 21:47:00 +0000</pubDate><atom:updated>2020-09-28T00:47:22.497+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Alper Konuralp</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Core</category><category domain="http://www.blogger.com/atom/ns#">OData</category><category domain="http://www.blogger.com/atom/ns#">OData Server</category><category domain="http://www.blogger.com/atom/ns#">OData WebApi</category><title>OData Server Serisi - B005 - OData&#39;ya Giriş</title><description>&lt;h2&gt;OData Server Serisi - B005 - OData&#39;ya Giriş | OData Server Series - E005 - Introduction to OData&lt;/h2&gt;&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/V3NsT_o33Ng&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div style=&quot;-en-clipboard: true;&quot;&gt;Merhaba bu seride bir OData Server geliştirirken, yaşadıklarımı sizlerle paylaşmak istiyorum. Microsoft .Net Core 3.1 ve C# kullanarak geliştireceğim bu projeyi bütün adımlarıyla sizlerle paylaşacağım.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bu 5. bölümde projemize, OData&#39;yı ekliyoruz. Bir önceki bölümde hazırladığımız 2 varlığı dünyaya açacağız.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bölüm linkleri :&amp;nbsp;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;OData.org :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/&quot;&gt;https://www.odata.org/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;OData WebApi :&amp;nbsp;&lt;a href=&quot;https://github.com/OData/WebApi&quot;&gt;https://github.com/OData/WebApi&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;Enabling Endpoint Routing in OData :&amp;nbsp;&lt;a href=&quot;https://devblogs.microsoft.com/odata/enabling-endpoint-routing-in-odata/&quot;&gt;https://devblogs.microsoft.com/odata/enabling-endpoint-routing-in-odata/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Projemizin GitHub adresi :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Kanalım :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;İyi seyirler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hello, I want to share with you what I have experienced while developing an OData Server in this series. I will share with you all the steps of this project that I will develop using Microsoft .Net Core 3.1 and C #.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this 5th section, we add OData to our project. We will open the 2 assets we prepared in the previous section to the world.&lt;/div&gt;&lt;div&gt;Section links:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;&lt;a href=&quot;http://odata.org/&quot;&gt;OData.org&lt;/a&gt; :&amp;nbsp;&lt;a href=&quot;https://www.odata.org/&quot;&gt;https://www.odata.org/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;OData WebApi :&amp;nbsp;&lt;a href=&quot;https://github.com/OData/WebApi&quot;&gt;https://github.com/OData/WebApi&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;Enabling Endpoint Routing in OData :&amp;nbsp;&lt;a href=&quot;https://devblogs.microsoft.com/odata/enabling-endpoint-routing-in-odata/&quot;&gt;https://devblogs.microsoft.com/odata/enabling-endpoint-routing-in-odata/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Out Project GitHub address :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;My Channel :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have a good time.&lt;/div&gt;</description><link>http://www.alperkonuralp.com/2020/09/odata-server-serisi-b005-odataya-giris.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/V3NsT_o33Ng/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-1289549758309679031</guid><pubDate>Sun, 27 Sep 2020 21:45:00 +0000</pubDate><atom:updated>2020-09-28T00:45:32.093+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Alper Konuralp</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Core</category><category domain="http://www.blogger.com/atom/ns#">OData</category><category domain="http://www.blogger.com/atom/ns#">OData Server</category><category domain="http://www.blogger.com/atom/ns#">OData WebApi</category><title>OData Server Serisi - B004 - Entity Framework</title><description>&lt;h2&gt;OData Server Serisi - B004 - Entity Framework  | OData Server Series - E004 - Entity Framework&lt;/h2&gt;&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/QdaUhJFW_1s&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div style=&quot;-en-clipboard: true;&quot;&gt;Merhaba bu seride bir OData Server geliştirirken, yaşadıklarımı sizlerle paylaşmak istiyorum. Microsoft .Net Core 3.1 ve C# kullanarak geliştireceğim bu projeyi bütün adımlarıyla sizlerle paylaşacağım.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bu 4. bölümde projemize, Entity Framework ekliyoruz. Sqlite kullanan, 2 varlıktan oluşan bir Entity Framework uygulamasının nasıl yapıldığını göreceğiz.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bölüm linkleri :&amp;nbsp;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Design-time DbContext Creation :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/tr-tr/ef/core/miscellaneous/cli/dbcontext-creation&quot;&gt;https://docs.microsoft.com/tr-tr/ef/core/miscellaneous/cli/dbcontext-creation&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;Logging in Entity Framework Core :&amp;nbsp;&lt;a href=&quot;https://www.entityframeworktutorial.net/efcore/logging-in-entityframework-core.aspx&quot;&gt;https://www.entityframeworktutorial.net/efcore/logging-in-entityframework-core.aspx&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Projemizin GitHub adresi :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Kanalım :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;İyi seyirler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hello, I want to share with you what I have experienced while developing an OData Server in this series. I will share with you all the steps of this project that I will develop using Microsoft .Net Core 3.1 and C #.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this 4th part, we add Entity Framework to our project. We will see how to make an Entity Framework application consisting of 2 entities using sqlite.&lt;/div&gt;&lt;div&gt;Section links:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Design-time DbContext Creation :&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/tr-tr/ef/core/miscellaneous/cli/dbcontext-creation&quot;&gt;https://docs.microsoft.com/tr-tr/ef/core/miscellaneous/cli/dbcontext-creation&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;Logging in Entity Framework Core :&amp;nbsp;&lt;a href=&quot;https://www.entityframeworktutorial.net/efcore/logging-in-entityframework-core.aspx&quot;&gt;https://www.entityframeworktutorial.net/efcore/logging-in-entityframework-core.aspx&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Out Project GitHub address :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;My Channel :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have a good time.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
</description><link>http://www.alperkonuralp.com/2020/09/odata-server-serisi-b004-entity.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/QdaUhJFW_1s/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-7106062567558259790</guid><pubDate>Sun, 27 Sep 2020 21:43:00 +0000</pubDate><atom:updated>2020-09-28T00:43:20.907+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Alper Konuralp</category><category domain="http://www.blogger.com/atom/ns#">Castle Windsor</category><category domain="http://www.blogger.com/atom/ns#">GitHub</category><category domain="http://www.blogger.com/atom/ns#">Log4net</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Core</category><category domain="http://www.blogger.com/atom/ns#">OData</category><category domain="http://www.blogger.com/atom/ns#">OData Server</category><category domain="http://www.blogger.com/atom/ns#">OData WebApi</category><title>OData Server Serisi - B003 - Castle Windsor</title><description>&lt;h2&gt;OData Server Serisi - B003 - Castle Windsor | OData Server Series - E003 - Castle Windsor&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/FfObuuxZ8Qg&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;-en-clipboard: true;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;Merhaba bu seride bir OData Server geliştirirken, yaşadıklarımı sizlerle paylaşmak istiyorum. Microsoft .Net Core 3.1 ve C# kullanarak geliştireceğim bu projeyi bütün adımlarıyla sizlerle paylaşacağım.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bu 3. bölümde projemize, Castle Windsor ve Log4net paketlerini ekliyoruz. Castle Windsor ile projemize tak çalıştır desteği gelirken, log4net ile loglama sistemimiz oluyor.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Bölüm linkleri :&amp;nbsp;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Castle Windsor :&amp;nbsp;&lt;a href=&quot;https://github.com/castleproject/Windsor&quot;&gt;https://github.com/castleproject/Windsor&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;log4net :&amp;nbsp;&lt;a href=&quot;http://logging.apache.org/log4net/&quot;&gt;http://logging.apache.org/log4net/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Projemizin GitHub adresi :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Kanalım :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;İyi seyirler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;|&amp;nbsp;&lt;/div&gt;&lt;div&gt;Hello, I want to share with you what I have experienced while developing an OData Server in this series. I will share with you all the steps of this project that I will develop using Microsoft .Net Core 3.1 and C #.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this 3rd part, we add Castle Windsor and Log4net packages to our project. With Castle Windsor, we have plug and play support for our project, and we have a logging system with log4net.&lt;/div&gt;&lt;div&gt;Section links:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Castle Windsor: &lt;a href=&quot;https://github.com/castleproject/Windsor&quot;&gt;https://github.com/castleproject/Windsor&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;log4net: &lt;a href=&quot;http://logging.apache.org/log4net/&quot;&gt;http://logging.apache.org/log4net/&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Out Project GitHub address :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;My Channel :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;</description><link>http://www.alperkonuralp.com/2020/09/odata-server-serisi-b003-castle-windsor.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/FfObuuxZ8Qg/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-8972206259589415503</guid><pubDate>Sun, 27 Sep 2020 21:40:00 +0000</pubDate><atom:updated>2020-09-28T00:40:39.400+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Alper Konuralp</category><category domain="http://www.blogger.com/atom/ns#">GitHub</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Core</category><category domain="http://www.blogger.com/atom/ns#">OData</category><category domain="http://www.blogger.com/atom/ns#">OData Server</category><category domain="http://www.blogger.com/atom/ns#">OData WebApi</category><title>OData Server Serisi - B002 - Proje Hazırlığı</title><description>&lt;p&gt;OData Server Serisi - B002 - Proje Hazırlığı
&lt;span&gt;| OData Server Series - E002 - The project preparation&lt;/span&gt;

&lt;/p&gt;
&lt;p&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/JNj54mG8rL8&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;Merhaba bu seride bir OData Server geliştirirken, yaşadıklarımı sizlerle paylaşmak istiyorum. Microsoft .Net Core 3.1 ve C# kullanarak geliştireceğim bu projeyi bütün adımlarıyla sizlerle paylaşacağım.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bu 2. bölümde boş projemizi GitHub&#39;dan indirip, yeni solution&#39;ımızı oluşturuyoruz.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Projemizin GitHub adresi :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Kanalım :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;İyi seyirler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hello, I want to share with you what I have experienced while developing an OData Server in this series. I will share with you all the steps of this project that I will develop using Microsoft .Net Core 3.1 and C #.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this 2nd part, we download our blank project from GitHub and create our new solution.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Out Project GitHub address :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;My Channel :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have a good time.&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;</description><link>http://www.alperkonuralp.com/2020/09/odata-server-serisi-b002-proje-hazrlg.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/JNj54mG8rL8/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-1222483254382443705</guid><pubDate>Sun, 27 Sep 2020 21:36:00 +0000</pubDate><atom:updated>2020-09-28T00:36:51.277+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Alper Konuralp</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Asp.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Microsoft.Net Core</category><category domain="http://www.blogger.com/atom/ns#">OData</category><category domain="http://www.blogger.com/atom/ns#">OData Server</category><category domain="http://www.blogger.com/atom/ns#">OData WebApi</category><title>OData Server Serisi - B001 - Tanışma</title><description>&lt;p&gt;&lt;br /&gt;
&lt;span&gt;OData Server Serisi - B001 - Tanışma | OData Server Series - E001 - Pilot&lt;/span&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;344&quot; src=&quot;https://www.youtube.com/embed/videoseries?list=PLTzpV7jb-qW-5AohCo7_tv5UYuJAl4BNM&quot; width=&quot;425&quot;&gt;&lt;/iframe&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;
&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;-en-clipboard: true;&quot;&gt;Merhaba bu seride bir OData Server geliştirirken, yaşadıklarımı sizlerle paylaşmak istiyorum. Microsoft .Net Core 3.1 ve C# kullanarak geliştireceğim bu projeyi bütün adımlarıyla sizlerle paylaşacağım. Bu bölümde öncelikle OData ve projemiz ile ilgili bilgiler paylaşmak istiyorum.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Projemizin GitHub adresi :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Kanalım :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;İyi seyirler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hello, I want to share with you what I have experienced while developing an OData Server in this series. I will share with you all the steps of this project that I will develop using Microsoft .Net Core 3.1 and C #. In this section, I firstly want to share information about OData and our project.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Out Project GitHub address :&amp;nbsp;&lt;a href=&quot;https://github.com/alperkonuralp/ProjectODataServer&quot;&gt;https://github.com/alperkonuralp/ProjectODataServer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;My Channel :&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/c/AlperKonuralp35&quot;&gt;https://www.youtube.com/c/AlperKonuralp35&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have a good time.&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;</description><link>http://www.alperkonuralp.com/2020/09/odata-server-serisi-b001-tansma.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/videoseries/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-2334910509433142637</guid><pubDate>Mon, 11 Feb 2019 09:01:00 +0000</pubDate><atom:updated>2019-02-13T10:22:15.079+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Jest</category><category domain="http://www.blogger.com/atom/ns#">Jest Typescript Unit Test</category><category domain="http://www.blogger.com/atom/ns#">Typescript</category><category domain="http://www.blogger.com/atom/ns#">Unit Test</category><category domain="http://www.blogger.com/atom/ns#">Vue.js</category><category domain="http://www.blogger.com/atom/ns#">Vuetify</category><title>Vue.js, Vuetify, Typescript ve Jest ile unit test yazmak</title><description>&lt;h2&gt;
Vue.js, Vuetify, Typescript ve Jest ile unit test yazmak&lt;/h2&gt;
&lt;h2&gt;
Writing unit test with Vue.js, Vuetify, Typescript and Jest&lt;/h2&gt;
&lt;br /&gt;
Geliştirmekte olduğumuz proje kapsamında Vue.js, Vuetify ve Typescript ile çalışmaktayız. Burada unit test yazmak istediğimizde biraz araştırma yapmak, ve çıkan problemlerle boğuşmak zorunda kaldık. Bu yazıda bulduğumuz çözümler ile konuyu anlatmak istiyorum :&lt;br /&gt;
Öncelikle unit test aracı olarak jest kullanmaya karar verdik. Vue.js Cli tarafından öncelik Mocka&#39;ya verilmiş olsada bizim projemizde onu açlıştırmak hiç kolay olmadı. Sıkıntı typescript kullanmamızdan kaynaklanmakta. bu iş için kullanacağımız araçların hepsi typescript destekli değil maalesef. Gelelim adımlara :&lt;br /&gt;
1. npm ile bazı paketleri projemize eklememiz lazım :&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;npm i -D jest@23.6.0 jsdom@13.2.0 jsdom-global@3.0.2 ts-jest@23.10.5 @vue/test-utils @vue/cli-plugin-unit-jest @vue/cli-plugin-typescript&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Burada önemli nokta jest sürümünün 23&#39;de kalması. Çünkü ts-jest şu anda (11.02.2019 itibari ile) sadece jest&#39;in 23. versiyonuna kadar destek vermekte. jest&#39;i 24. versiyona geçirirseniz bir sürü problem ve uyumsuzluk çıkmakta.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Ayrıca&amp;nbsp; jest&#39;i direk çağırabilmek için aşağıdaki komutu&#39;da çalıştırmamız gerekiyor :&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;npm i -g jest&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;2. Projenizin root dizininde jest.config.js isimli bir dosya oluşturuyoruz ve aşağıdaki gibi içini dolduruyoruz:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background: #1e1e1e; color: gainsboro; font-family: Consolas; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;{&amp;nbsp;defaults&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&amp;nbsp;require(&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;jest-config&#39;&lt;/span&gt;);
&lt;span style=&quot;color: #57a64a;&quot;&gt;//&amp;nbsp;jest.config.js
&lt;/span&gt; 
module.exports&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;preset:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;ts-jest&#39;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;testEnvironment:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;node&#39;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;moduleNameMapper:&amp;nbsp;{&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;^@/(.*)$&#39;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;&amp;lt;rootDir&amp;gt;/src/$1&#39;&lt;/span&gt;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;moduleFileExtensions:&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;...&lt;/span&gt;defaults.moduleFileExtensions,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #57a64a;&quot;&gt;//&amp;nbsp;tell&amp;nbsp;Jest&amp;nbsp;to&amp;nbsp;handle&amp;nbsp;`*.vue`&amp;nbsp;files
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&quot;vue&quot;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;ts&#39;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;tsx&#39;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;transform:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #57a64a;&quot;&gt;//&amp;nbsp;process&amp;nbsp;`*.vue`&amp;nbsp;files&amp;nbsp;with&amp;nbsp;`vue-jest`
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;^.+\\.vue$&#39;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;vue-jest&#39;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$&#39;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;jest-transform-stub&#39;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;^.+\\.tsx?$&#39;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;ts-jest&#39;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;snapshotSerializers:&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;jest-serializer-vue&#39;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;testMatch:&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;**/tests/unit/**/*.(spec|test).(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)&#39;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;testURL:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;http://localhost/&#39;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;globals:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;navigator:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;userAgent:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;node&#39;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;navigator:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;userAgent:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;node&#39;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;},
 
&amp;nbsp;&amp;nbsp;setupTestFrameworkScriptFile:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&quot;&amp;lt;rootDir&amp;gt;/tests/jest-setup.ts&quot;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;collectCoverage:&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;true&lt;/span&gt;
};
&lt;/pre&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;collectCoverage ile projemizin coverage&#39;ını görmemiz sağlanmış olmakta.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Testlerimizin, projenin root dizininin altındaki tests isimli dizinde yer alacağını söylemekteyiz. Ben biraz düzen manyağı olduğum için alt dizinlerle çalışabilmek içinde /**/ şeklindeki path yazımını kullanıyorum. Böylece tests altındaki bütün alt dizinlerde taranıyor. Ayrıca test olarak sistem sadece .test.ts , .spec.ts , .test.js , .spec.js uzantılarını kabul etmekte. tsx ve jsx de var ama biz bunları kullanmadığımız için pas geçtim.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;3. tests dizininin içinde jest-setup.ts dosyasını oluşturuyoruz. Bu dosya test sisteminin genel bir setup dosyası olup, ilk çalıştırılan dosya olmakta.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background: #1e1e1e; color: gainsboro; font-family: Consolas; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: #57a64a;&quot;&gt;//&amp;nbsp;&amp;nbsp;package.json&amp;nbsp;has&amp;nbsp;a&amp;nbsp;section&amp;nbsp;that&amp;nbsp;instructs&amp;nbsp;jest&amp;nbsp;to
//&amp;nbsp;&amp;nbsp;read&amp;nbsp;this&amp;nbsp;setup/startup&amp;nbsp;file.
&lt;/span&gt;
&lt;span style=&quot;color: #57a64a;&quot;&gt;//&amp;nbsp;jsdom&amp;nbsp;&#39;u&amp;nbsp;testler&amp;nbsp;için&amp;nbsp;register&amp;nbsp;ediyoruz.
&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;import&lt;/span&gt;&amp;nbsp;jsdomGlobal&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;jsdom-global&#39;&lt;/span&gt;;
jsdomGlobal();
 
&lt;span style=&quot;color: #57a64a;&quot;&gt;//&amp;nbsp;Vue&amp;nbsp;kullanmak&amp;nbsp;yerine&amp;nbsp;localVue&amp;nbsp;kullandığımız&amp;nbsp;için&amp;nbsp;bu&amp;nbsp;kısmı&amp;nbsp;yorum&amp;nbsp;haline&amp;nbsp;getirdim.&amp;nbsp;
&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;import&lt;/span&gt;&amp;nbsp;Vue&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;vue&#39;&lt;/span&gt;;
 
&lt;span style=&quot;color: #57a64a;&quot;&gt;//&amp;nbsp;//&amp;nbsp;&amp;nbsp;DON&#39;T&amp;nbsp;DO&amp;nbsp;THIS&amp;nbsp;or&amp;nbsp;you&#39;ll&amp;nbsp;have&amp;nbsp;problems&amp;nbsp;like&amp;nbsp;&amp;lt;v-btn&amp;nbsp;:to=&quot;...&quot;&amp;gt;&amp;nbsp;rendering
//&amp;nbsp;//&amp;nbsp;&amp;nbsp;as&amp;nbsp;&amp;lt;router-link&amp;gt;&amp;nbsp;instead&amp;nbsp;of&amp;nbsp;&amp;lt;a&amp;nbsp;href=&quot;...&quot;&amp;gt;&amp;nbsp;on&amp;nbsp;the&amp;nbsp;unit&amp;nbsp;tests.
//&amp;nbsp;//&amp;nbsp;&amp;nbsp;See&amp;nbsp;tests/Foo.spec.js&amp;nbsp;to&amp;nbsp;learn&amp;nbsp;how&amp;nbsp;to&amp;nbsp;use&amp;nbsp;Vuetify&amp;nbsp;in&amp;nbsp;the&amp;nbsp;unit&amp;nbsp;tests.
//&amp;nbsp;//&amp;nbsp;import&amp;nbsp;Vuetify&amp;nbsp;from&amp;nbsp;&#39;vuetify&#39;;
//&amp;nbsp;//&amp;nbsp;Vue.use(Vuetify);&amp;nbsp;//&amp;nbsp;NO,&amp;nbsp;DON&#39;T&amp;nbsp;DO&amp;nbsp;THIS.
&lt;/span&gt;
&lt;span style=&quot;color: #57a64a;&quot;&gt;//&amp;nbsp;//&amp;nbsp;&amp;nbsp;You&amp;nbsp;may&amp;nbsp;not&amp;nbsp;need&amp;nbsp;this.&amp;nbsp;Uncomment&amp;nbsp;only&amp;nbsp;if&amp;nbsp;you&amp;nbsp;see&amp;nbsp;some&amp;nbsp;sort&amp;nbsp;of
//&amp;nbsp;//&amp;nbsp;&amp;nbsp;regeneratorRuntime&amp;nbsp;error.
//&amp;nbsp;//&amp;nbsp;import&amp;nbsp;&#39;babel-polyfill&#39;;
&lt;/span&gt;
&lt;span style=&quot;color: #57a64a;&quot;&gt;//&amp;nbsp;&amp;nbsp;So&amp;nbsp;we&amp;nbsp;don&#39;t&amp;nbsp;see&amp;nbsp;unnecessary&amp;nbsp;Vue&amp;nbsp;warnings&amp;nbsp;about&amp;nbsp;production.
&lt;/span&gt;Vue.config.productionTip&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;false&lt;/span&gt;;
&lt;/pre&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Gördüğünüz gibi Vue&#39;de burada register olmakta.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;4. Sonrada isteğinize göre test dosyalarınızı oluşturabiliyorsunuz: &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background: #1e1e1e; color: gainsboro; font-family: Consolas; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;import&lt;/span&gt;&amp;nbsp;{&amp;nbsp;shallowMount&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;@vue/test-utils&#39;&lt;/span&gt;;
&lt;span style=&quot;color: #569cd6;&quot;&gt;import&lt;/span&gt;&amp;nbsp;CustomCommandColumn&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;../../../../../src/components/data-table/components/columns/custom-command-column.vue&#39;&lt;/span&gt;;
&lt;span style=&quot;color: #569cd6;&quot;&gt;import&lt;/span&gt;&amp;nbsp;Vuetify&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;vuetify&#39;&lt;/span&gt;;
&lt;span style=&quot;color: #569cd6;&quot;&gt;import&lt;/span&gt;&amp;nbsp;Vue&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;vue&#39;&lt;/span&gt;;
 
describe(&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;custom-command-column-without-tooltip&#39;&lt;/span&gt;,&amp;nbsp;()&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&amp;gt;&lt;/span&gt;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;Vue.use(Vuetify);
 
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;c&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&amp;nbsp;shallowMount(CustomCommandColumn,&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;propsData:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;row:&amp;nbsp;{},
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;custom:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;key:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;cc1&#39;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;icon:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;fa-ink&#39;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;});
 
&amp;nbsp;&amp;nbsp;it(&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;Simple&amp;nbsp;use&amp;nbsp;without&amp;nbsp;tooltip&#39;&lt;/span&gt;,&amp;nbsp;()&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&amp;gt;&lt;/span&gt;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;vm&lt;span style=&quot;color: #b4b4b4;&quot;&gt;:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;any&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&amp;nbsp;c.vm;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;expect(vm.isVisible).toBe(&lt;span style=&quot;color: #569cd6;&quot;&gt;true&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;expect(vm.custom.icon).toBe(&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;fa-ink&#39;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #57a64a;&quot;&gt;//&amp;nbsp;console.log(c.element.outerHTML);
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;expect(c.find(&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;v-icon-stub&#39;&lt;/span&gt;).exists()).toBe(&lt;span style=&quot;color: #569cd6;&quot;&gt;true&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;expect(c.find(&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;v-tooltip-stub&#39;&lt;/span&gt;).exists()).toBe(&lt;span style=&quot;color: #569cd6;&quot;&gt;false&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;});
});
&lt;/pre&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;5. Test&#39;leri çalıştırmak için command prompt veya terminal&#39;de jest yazmanız yeterli olacaktır. Ancak npm ile çalıştığımız için package.json içerisine bir scripts ekleyerek bu işin npm&#39;de yapılmasını da sağlıyoruz.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;pre style=&quot;background: #1e1e1e; color: gainsboro; font-family: Consolas; font-size: 13px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&quot;jest&quot;&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;,&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
bunun kullanımı ise&lt;br /&gt;
npm t&lt;br /&gt;
komutu ile olmakta :&lt;br /&gt;
&lt;img alt=&quot;&quot; height=&quot;616&quot; src=&quot;data:image/png;base64,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&quot; width=&quot;640&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://www.alperkonuralp.com/2019/02/vuejs-vuetify-typescript-ve-jest-ile.html</link><author>noreply@blogger.com (Alper Konuralp)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-6376315000745669549</guid><pubDate>Mon, 11 Feb 2019 08:30:00 +0000</pubDate><atom:updated>2019-02-13T10:16:08.242+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Jest Typescript Unit Test</category><category domain="http://www.blogger.com/atom/ns#">mount</category><category domain="http://www.blogger.com/atom/ns#">shalowMount</category><category domain="http://www.blogger.com/atom/ns#">Typescript</category><category domain="http://www.blogger.com/atom/ns#">Unit Test</category><category domain="http://www.blogger.com/atom/ns#">Vue.js</category><category domain="http://www.blogger.com/atom/ns#">Vuetify</category><title>Vue.js Unit Test için mount ve shallowMount farkı</title><description>&lt;h2&gt;
Vue.js Unit Test için mount ve shallowMount farkı&lt;/h2&gt;
&lt;h2&gt;
mount and shallowMount difference for Vue.js Unit Test&lt;/h2&gt;
&lt;br /&gt;
Vue.js ile unit test yazmak istediğinizde karşımıza 2 yardımcı(helper) metod çıkıyor. Bunlardan ilki &lt;a href=&quot;https://vue-test-utils.vuejs.org/api/#mount&quot; target=&quot;_blank&quot;&gt;mount&amp;nbsp;&lt;/a&gt; : Bu metod komponent&#39;imizin test edebileceğimiz bir örneğini sağlarken, bu komponent&#39;in içindeki bütün alt komponent&#39;leri de oluşturmaktadir. Yani iç içe kullandığımız bütün komponent&#39;lerimiz oluşturulup kullanıma sunulmaktadır. mount ile dökümandaki bir örneği aşağıda görebilirsiniz :&lt;br /&gt;
&lt;br /&gt;
When you want to write a unit test with Vue.js, we can use 2 helper methods. The first of these is &quot;mount&quot;: While this method provides an instance of our component that we can test, it also creates all the sub-components inside this component. In other words, all components that we use nested are created and made available. Here is an example of the document with mount: &lt;br /&gt;
&lt;div class=&quot;language-js extra-class&quot;&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; mount &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;@vue/test-utils&#39;&lt;/span&gt;;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Foo &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./Foo.vue&#39;;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Foo&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;renders a div&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; wrapper &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mount&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Foo&lt;span class=&quot;token punctuation&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;wrapper&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;contains&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;div&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toBe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;; &lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
Burada Foo ismindeki komponent&#39;imiz içindeki bütün alt komponent&#39;lerle beraber oluşturulup kullanıma sunulur. Büyük bir iş sürecini test etmek istediğimizde kullanabileceğimiz bir yöntem.&lt;br /&gt;
&lt;br /&gt;
Here, the component called Foo is created with all sub components in it. A method we can use when we want to test a large business process.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://vue-test-utils.vuejs.org/api/#shallowmount&quot; target=&quot;_blank&quot;&gt;shallowMount&lt;/a&gt; : Bu metod mount metoduna çok benzemekle beraber, farklı olarak, sadece çalışılan komponent&#39;i oluşturup, alt komponent&#39;leri &quot;-stub&quot; son eki ile isimlendirip aynı bırakır. Örnek olarak kendi kodumdan şöyle bir örnek verebilirim :&lt;br /&gt;
&lt;br /&gt;
shallowMount: This method is very similar to the mount method. Unlike, this method generates only the main component. This method changes names the sub-components with the suffix &quot;-stub&quot;. But this method does not create an instance for sub components. For example, let me share a part of my own code: &lt;br /&gt;&lt;pre style=&quot;background: #1e1e1e; color: gainsboro; font-family: Consolas; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v-if&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;&quot;isVisible&quot;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #00a0a0;&quot;&gt;&amp;amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;v-tooltip&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;top&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v-if&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;&quot;!!custom.tooltip&quot;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;v-icon&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;slot&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;&quot;activator&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;@click.stop&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;&quot;customClicked&quot;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;{{&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: magenta;&quot;&gt;custom.icon&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;}}&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;v-icon&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;{{&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: magenta;&quot;&gt;custom.tooltip&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: magenta;&quot;&gt;|&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: magenta;&quot;&gt;translate&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;}}&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;v-tooltip&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;v-icon&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v-else&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;@click.stop&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;&quot;customClicked&quot;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;{{&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: magenta;&quot;&gt;custom.icon&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;}}&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;v-icon&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;script&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;&quot;ts&quot;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
Burada vuetify ile geliştirdiğim bir komponent görünmektedir. Bu komponent&#39;i shallowMount ile oluşturduğumuzda şöyle bir sonuç alıyoruz :&lt;br /&gt;
&lt;br /&gt;
Here I see a component I developed with vuetify. When we create this component with shallowMount, we get a result:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;/code&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;v-tooltip-stub opendelay=&quot;200&quot;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;                    closedelay=&quot;200&quot;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;                    contentclass=&quot;&quot;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;                    fixed=&quot;true&quot;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;                    top=&quot;true&quot;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;                    maxwidth=&quot;auto&quot;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;                    nudgebottom=&quot;0&quot;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;                    nudgeleft=&quot;0&quot;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;                    nudgeright=&quot;0&quot;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;                    nudgetop=&quot;0&quot;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;                    nudgewidth=&quot;0&quot;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;                    debounce=&quot;0&quot;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;                    tag=&quot;span&quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;v-icon-stub&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;            fa-ink&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;        &amp;lt;/v-icon-stub&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;        &amp;lt;span&amp;gt;Deneme&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;    &amp;lt;/v-tooltip-stub&amp;gt;
&amp;lt;/div&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
Dikkat edebileceğiniz gibi, v-tooltip komponent&#39;i v-tooltip-stub olarak, v-icon komponent&#39;i de v-icon-stub olarak aynen korunmuş durumdadır. mount metodunu kullanmış olsaydık, bu komponentlerin de render edilmiş hallerini çıktıda görecektik.&lt;br /&gt;
&lt;br /&gt;
As you may notice, the v-tooltip component is v-tooltip-stub, and the v-icon component is protected as v-icon-stub. If we had used the mount method, we would see the rendered version of these components in the output.&lt;br /&gt;
&lt;br /&gt;</description><link>http://www.alperkonuralp.com/2019/02/vuejs-unit-test-icin-mount-ve.html</link><author>noreply@blogger.com (Alper Konuralp)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-8828347587442707719</guid><pubDate>Mon, 11 Feb 2019 08:08:00 +0000</pubDate><atom:updated>2019-02-13T09:59:27.870+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Jest</category><category domain="http://www.blogger.com/atom/ns#">Jest Typescript Unit Test</category><category domain="http://www.blogger.com/atom/ns#">Typescript</category><category domain="http://www.blogger.com/atom/ns#">Unit Test</category><category domain="http://www.blogger.com/atom/ns#">Unit Tests for Events</category><category domain="http://www.blogger.com/atom/ns#">Vue.js</category><category domain="http://www.blogger.com/atom/ns#">Vuetify</category><title>Vue Unit Test ile alt komponent olaylarının(events) testi</title><description>&lt;h2&gt;
Vue Unit Test ile alt komponent olaylarının(events) testi &lt;/h2&gt;
&lt;h2&gt;
Testing of sub-component events with Vue Unit Test&lt;/h2&gt;
&lt;br /&gt;
Vue.js, Vuetify ve typescript ile geliştirdiğimiz komponentlerimiz için unit test yazmak istediğimizde karşımıza çıkan bir sorundan bahsetmek istiyorum. Hazırladığımız komponent içinde yeralan bir icon (vuetify v-icon komponenti) üzerinde yazmış olduğumuz @click event&#39;ının tetiklenmesi gerekiyor. Bunu jest kullandığımız unit testimizde nasıl tetikleriz diye düşündüm. Araştırma yaptım. Ancak önerilen yöntemler maalesef sonuç vermedi. Önce kodlara bir bakalım :&lt;br /&gt;
&lt;br /&gt;
I would like to talk about a problem that we encountered when we wanted to write a unit test for our components we developed with Vue.js, Vuetify and typescript. We need to trigger the @click event that we wrote on an icon in the component we prepared. I thought about how to trigger this in our unit test, which we used as a &quot;Jest&quot;. I did research. However, the recommended methods did not yield results. Let&#39;s look at the codes first:&lt;br /&gt;
&lt;br /&gt;
Vue Komponent&#39;imiz: Our Vue Component:&lt;br /&gt;
&lt;code&gt;
&lt;template&gt;
  &lt;/template&gt;&lt;/code&gt;&lt;br /&gt;
&lt;div v-if=&quot;isVisible&quot;&gt;
&lt;pre style=&quot;background: #1e1e1e; color: gainsboro; font-family: Consolas; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v-if&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;&quot;isVisible&quot;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #00a0a0;&quot;&gt;&amp;amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;v-tooltip&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;top&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v-if&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;&quot;!!custom.tooltip&quot;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;v-icon&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;slot&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;&quot;activator&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;@click.stop&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;&quot;customClicked&quot;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;{{&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: magenta;&quot;&gt;custom.icon&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;}}&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;v-icon&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;{{&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: magenta;&quot;&gt;custom.tooltip&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: magenta;&quot;&gt;|&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: magenta;&quot;&gt;translate&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;}}&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;v-tooltip&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;v-icon&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v-else&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;@click.stop&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;customClicked&lt;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;{{&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: magenta;&quot;&gt;custom.icon&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;}}&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;v-icon&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;script&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #c8c8c8;&quot;&gt;&quot;ts&quot;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style=&quot;background: #1e1e1e; color: gainsboro; font-family: Consolas; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: grey;&quot;&gt;... &lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;code&gt;

&lt;script lang=&quot;ts&quot;&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;/script&gt;&lt;/code&gt; &lt;br /&gt;
&lt;br /&gt;
Burada ben çözümü komponent&#39;in üzerindeki event&#39;i tetiklemek yerine, event için atanmış customClicked metodunu tetiklemek olarak buldum. v-icon component&#39;i üzerindeki @click event&#39;ının çalışcağından emin olduğumuz için bu mantıklı bir yaklaşım olmakta.&lt;br /&gt;
&lt;br /&gt;
Here I found the solution as triggering the customClicked method assigned to the event instead of triggering the event on the component. This is a logical approach because we&#39;re confident that the @click event on the v-icon component will work. &lt;br /&gt;
&lt;br /&gt;
Test Kodumuz: Our Test Code: &lt;br /&gt;
&lt;pre style=&quot;background: #1e1e1e; color: gainsboro; font-family: Consolas; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;import&lt;/span&gt;&amp;nbsp;{&amp;nbsp;shallowMount&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;@vue/test-utils&#39;&lt;/span&gt;;
&lt;span style=&quot;color: #569cd6;&quot;&gt;import&lt;/span&gt;&amp;nbsp;CustomCommandColumn&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;custom-command-column.vue&#39;&lt;/span&gt;;
&lt;span style=&quot;color: #569cd6;&quot;&gt;import&lt;/span&gt;&amp;nbsp;Vue&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;vue&#39;&lt;/span&gt;;
&lt;span style=&quot;color: #569cd6;&quot;&gt;import&lt;/span&gt;&amp;nbsp;Vuetify&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;vuetify&#39;&lt;/span&gt;;
 
describe(&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;custom-command-column-with-action-url&#39;&lt;/span&gt;,&amp;nbsp;()&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&amp;gt;&lt;/span&gt;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;Vue.use(Vuetify);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;routerUrls&lt;span style=&quot;color: #b4b4b4;&quot;&gt;:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;any&lt;/span&gt;[]&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;actionUrl&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;/deneme/deneme&#39;&lt;/span&gt;;
 
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;$router&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;push:&amp;nbsp;(url&lt;span style=&quot;color: #b4b4b4;&quot;&gt;:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;string&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&amp;gt;&lt;/span&gt;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;routerUrls.push(url);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;return&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;};
 
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;c&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&amp;nbsp;shallowMount(CustomCommandColumn,&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;propsData:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;row:&amp;nbsp;{},
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;custom:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;key:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;cc1&#39;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;icon:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;fa-ink&#39;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tooltip:&amp;nbsp;&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;`Deneme&#39;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; actionUrl,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mocks:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$router,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;});
 
&amp;nbsp;&amp;nbsp;it(&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;Simple&amp;nbsp;use&amp;nbsp;with&amp;nbsp;tooltip&#39;&lt;/span&gt;,&amp;nbsp;()&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&amp;gt;&lt;/span&gt;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&amp;nbsp;vm&lt;span style=&quot;color: #b4b4b4;&quot;&gt;:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;any&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&lt;/span&gt;&amp;nbsp;c.vm;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;expect(vm.isVisible).toBe(&lt;span style=&quot;color: #569cd6;&quot;&gt;true&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;expect(vm.custom.icon).toBe(&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;fa-ink&#39;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;expect(c.find(&lt;span style=&quot;color: #d69d85;&quot;&gt;&#39;v-tooltip-stub&amp;nbsp;v-icon-stub&#39;&lt;/span&gt;).exists()).toBe(&lt;span style=&quot;color: #569cd6;&quot;&gt;true&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.customClicked({});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;expect(routerUrls.some((r&lt;span style=&quot;color: #b4b4b4;&quot;&gt;:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;string&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;=&amp;gt;&lt;/span&gt;&amp;nbsp;r&amp;nbsp;&lt;span style=&quot;color: #b4b4b4;&quot;&gt;===&lt;/span&gt;&amp;nbsp;actionUrl)).toBe(&lt;span style=&quot;color: #569cd6;&quot;&gt;true&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;});
});&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://www.alperkonuralp.com/2019/02/vue-unit-test-icin-alt-komponent-event.html</link><author>noreply@blogger.com (Alper Konuralp)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-4180090390595199288</guid><pubDate>Mon, 11 Feb 2019 07:53:00 +0000</pubDate><atom:updated>2019-02-11T10:53:46.003+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Typescript</category><category domain="http://www.blogger.com/atom/ns#">Vue.js</category><category domain="http://www.blogger.com/atom/ns#">Vuetify</category><title>Vuejs ve Typescript konuları</title><description>Son zamanlarda projelerimizde Vuejs ve typescript kullanıyoruz. Bu iki dünya ile ilgili olarak karşılaştığımız problemlerini ve çözümlerini elimden geldiğince burada paylaşmaya çalışacağım. </description><link>http://www.alperkonuralp.com/2019/02/vuejs-ve-typescript-konular.html</link><author>noreply@blogger.com (Alper Konuralp)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-3337310549808504659</guid><pubDate>Mon, 22 Oct 2018 07:36:00 +0000</pubDate><atom:updated>2018-10-22T10:46:04.677+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Hrml DOM</category><category domain="http://www.blogger.com/atom/ns#">Typescript</category><title>Typescript window objesine property ve metod eklemek</title><description>Typescript bir çok konuda başarılı bir araç olmasına rağmen, javascript&#39;te rahatlıkla yaptığımız şeyler konusunda katı kurallar getirebiliyor. Bu makalede window objesine nasıl property ve metot ekleyebileceğimizi gösterdim. &lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
Mesela, window objesi üzerine javascript&#39;te aşağıdaki gibi bir kod yazmak çok mümkünken, Typescript&#39;te konu biraz daha sıkıntılı:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;// Javascript 
window.myProperty = &#39;demo&#39;;

// Typescript 
(window as any).myProperty = &#39;demo&#39;;

&lt;/pre&gt;
Ancak bu noktada Typescript için bir ayarlama yaparak bu durumdan kurtulabilirsiniz : 
1. shims-window.d.ts isminde bir dosya oluşturun.
2. Aşağıdaki kodu dosyanın içine yapıştırın:
&lt;br /&gt;
&lt;pre&gt;export {}; // this file needs to be a module

declare global {
  interface Window {
    myProperty?: string;
  }
}
&lt;/pre&gt;
Window interface&#39;i içine istediğiniz property ve metot&#39;u ekleyebilirsiniz. Ayrıca kendi tiplerinizi de kullanmanız mümkün. Örnek olarak User isminde bir tipiniz var ise :
&lt;br /&gt;
&lt;pre&gt;import { User } from &#39;./user&#39;;
export {}; // this file needs to be a module

declare global {
  interface Window {
    user?: User;
  }
}
&lt;/pre&gt;
</description><link>http://www.alperkonuralp.com/2018/10/typescript-window-objesine-property-ve.html</link><author>noreply@blogger.com (Alper Konuralp)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-8224835842834164615</guid><pubDate>Mon, 22 Oct 2018 07:08:00 +0000</pubDate><atom:updated>2018-10-22T10:44:33.140+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Frontend Development</category><category domain="http://www.blogger.com/atom/ns#">Typescript</category><category domain="http://www.blogger.com/atom/ns#">Vue.js</category><title>Vue.js VS Code ve Visual Studio hatası</title><description>Vue.js ile VS Code veya Visual Studio üzerinde projeler geliştiriyoruz. Bazen de hatalarla karşılaşabiliyoruz. Bunlardan biri ile ilgili çözüm yolunu bu makalede özetlemeye çalıştım. &lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
Eğer .vue uzantılı dosyaların import satırında&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjohi2bAuLeGLQkTGljfF_q_fEDn9EOJYRKBQiMQ0KFUJwYJ0Cj5znFiJOEq82OhPGm3l8ty7jvBwMXmAZCM8dKEathRdhk4f3e9iCLTiylxFXtSHkHd630xC5B9OAsl1_b-MCsRzDZSpnP/s1600/35704675-31a1bd22-0798-11e8-981b-61526afc69a4.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;205&quot; data-original-width=&quot;416&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjohi2bAuLeGLQkTGljfF_q_fEDn9EOJYRKBQiMQ0KFUJwYJ0Cj5znFiJOEq82OhPGm3l8ty7jvBwMXmAZCM8dKEathRdhk4f3e9iCLTiylxFXtSHkHd630xC5B9OAsl1_b-MCsRzDZSpnP/s1600/35704675-31a1bd22-0798-11e8-981b-61526afc69a4.png&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;TS2307: Cannot find module &#39;./components/App.vue&#39;&lt;/pre&gt;
&lt;br /&gt;
şeklinde bir hata alıyorsanız büyük ihtimalle şema tanımları ile ilgili dosyanız eksik veya hasarlıdır. Bu problemi çözmek için aşağıdaki yöntemi kullanabilirsiniz:&lt;br /&gt;
1. Projeniz içindeki .d.ts uzantılı, adı çoğunlukla shims-vue.d.ts veya vue-shims.d.ts olan dosyayı bulunuz.&lt;br /&gt;
2. Bu dosya yoksa shims-vue.d.ts isminde bir dosya oluşturunuz.&lt;br /&gt;
3. içine aşağıdaki kodu ekleyiniz.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;declare module &quot;*.vue&quot; {
  import Vue from &quot;vue&quot;;
  export default Vue;
}
&lt;/pre&gt;
&lt;br /&gt;
Bu sayede VS Code veya Visual Studio bu dosyaları anlayabilir hale gelecektir. </description><link>http://www.alperkonuralp.com/2018/10/vuejs-vs-code-ve-vs-icin-temel-ayarlar.html</link><author>noreply@blogger.com (Alper Konuralp)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjohi2bAuLeGLQkTGljfF_q_fEDn9EOJYRKBQiMQ0KFUJwYJ0Cj5znFiJOEq82OhPGm3l8ty7jvBwMXmAZCM8dKEathRdhk4f3e9iCLTiylxFXtSHkHd630xC5B9OAsl1_b-MCsRzDZSpnP/s72-c/35704675-31a1bd22-0798-11e8-981b-61526afc69a4.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-5165460853692564489</guid><pubDate>Mon, 16 Apr 2018 06:29:00 +0000</pubDate><atom:updated>2018-04-16T09:29:24.113+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Git</category><category domain="http://www.blogger.com/atom/ns#">git-credential-winstore.exe</category><category domain="http://www.blogger.com/atom/ns#">GitCredentialWinStore</category><title>Git&#39;te GitCredentialWinStore ile ilgili alınan hatanın çözümü</title><description>Git kurulumundan sonra remote(sunucu) ile ilgili işlemler yaptığınızda session açık olsada tekrar tekrar kullanıcı adı ve şifre soruyor ve mesaj ekranında aşağıdaki gibi bir hata alıyorsanız:&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&quot;C:\Program Files (x86)\GitExtensions\GitCredentialWinStore\git-credential-winstore.exe&quot; erase: C:\Program Files (x86)\GitExtensions\GitCredentialWinStore\git-credential-winstore.exe: No such file or directory&lt;/code&gt;&lt;/pre&gt;
bu durumda&amp;nbsp; git&#39;in şifre saklama sisteminde bir problem oluştuğunu görmekteyiz. Bunun çözümü olarak öncelikle https://github.com/Microsoft/Git-Credential-Manager-for-Windows adresinden Windows için git şifre yönetim aracını indirmeniz ve kurmanız gerekiyor. Dosyanın tam indirme linki :&lt;br /&gt;
https://github.com/Microsoft/Git-Credential-Manager-for-Windows/releases&lt;br /&gt;
şeklindedir. Güncel versiyonu buradan indirip kurduktan sonra GIT BASH ile 2 satırlık bir işlem yapmamız gerekiyor.&lt;br /&gt;
&lt;br /&gt;
1. öncelikle git&#39;in geçerli şifre yöneticisini siliyoruz :&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;git config --global --unset credential.helper&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
2. sonra da tekrar ekliyoruz:&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&lt;code&gt;git config --global credential.helper wincred&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;Bu işlemden sonra problemin çözülmüş olması lazım.&lt;/code&gt;&lt;/pre&gt;
</description><link>http://www.alperkonuralp.com/2018/04/gitte-gitcredentialwinstore-ile-ilgili.html</link><author>noreply@blogger.com (Alper Konuralp)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-435012038632500425.post-6096255499208613884</guid><pubDate>Sun, 24 Dec 2017 10:49:00 +0000</pubDate><atom:updated>2017-12-24T13:53:20.944+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Azure Cosmos DB</category><category domain="http://www.blogger.com/atom/ns#">Azure Cosmos DB Emulator</category><title>Azure Cosmos DB Emulator Çalışmıyor.</title><description>Merhaba, Bugün &lt;span class=&quot;title&quot;&gt;Azure Cosmos DB&#39;ye bir göz attım. Kullanımını anlamak için kendi bilgisayarımıza bir emulator(&lt;/span&gt;&lt;span class=&quot;title&quot;&gt;&lt;span class=&quot;title&quot;&gt;Azure Cosmos DB Emulator&lt;/span&gt;) kurabiliyoruz. Bunu kurup çalıştırdığımda DocumentDB.StartupEntryPoint.exe&#39;nin hata verdiğini gördüm. &lt;/span&gt;Hatanın detayını eventviewer&#39;dan şöyle gördüm:&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;data:image/png;base64,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&quot; /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Problemin performans counter ile ilgili olduğunu google araması sonucunda buldum. Çözüm için aşağıdaki&amp;nbsp; adımları izleyebilirsiniz:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;1. Runas Administrator olarak command prompt veya powershell açınız.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;2. Aşağıdaki&lt;/span&gt;&lt;span class=&quot;title&quot;&gt; komutunu yazarak çalıştırınız:&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px; margin: 0px; padding: 0px;&quot;&gt;lodctr&lt;/span&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&amp;nbsp;/R&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&gt;
&lt;span class=&quot;title&quot;&gt;3. eğer &lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;Error: Unable to rebuild performance counter setting from&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px; margin: 0px; padding: 0px;&quot;&gt;system
 backup store&lt;/span&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;, error code is 2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;şeklinde bir hata alırsanız şu komut ile syswow64 dizinine geçiniz:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px; margin: 0px; padding: 0px;&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;C:\Windows\&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;syswow64&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;ve &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;span class=&quot;title&quot;&gt; &lt;/span&gt;&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px; margin: 0px; padding: 0px;&quot;&gt;lodctr&lt;/span&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&amp;nbsp;/R&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;span class=&quot;title&quot;&gt;komutunu tekrar deneyiniz.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;span class=&quot;title&quot;&gt;4. Herşey doğru ise aşağıdaki gibi bir sonuç almanız gerekmektedir.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;Info: Successfully rebuilt performance counter setting from system backup store&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;5. Son olarak &lt;/span&gt;aşağıdaki komut ile işlemi tamamlıyoruz:&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;winmgmt.exe /RESYNCPERF&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;Bundan sonra&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;span class=&quot;title&quot;&gt;Azure Cosmos DB Emulator uygulamasını kapatıp tekrar çalıştırdığınızda problem kalmayacaktır.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;span class=&quot;title&quot;&gt;Kaynaklar :&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;span class=&quot;title&quot;&gt;1. &lt;a href=&quot;https://stackoverflow.com/a/44415748&quot;&gt;https://stackoverflow.com/a/44415748&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;span class=&quot;title&quot;&gt;2. &lt;a href=&quot;https://social.technet.microsoft.com/Forums/ie/en-US/9b01e1a6-d872-4f28-9280-f35d6ca02a9f/lodctr-r-error-code-2?forum=w7itprogeneral&quot;&gt;https://social.technet.microsoft.com/Forums/ie/en-US/9b01e1a6-d872-4f28-9280-f35d6ca02a9f/lodctr-r-error-code-2?forum=w7itprogeneral&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;&lt;span style=&quot;color: #111111; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , &amp;quot;times&amp;quot; , serif; font-size: 14px; line-height: 21.993999481201172px;&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;span class=&quot;title&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;</description><link>http://www.alperkonuralp.com/2017/12/azure-cosmos-db-emulator-calsmyor.html</link><author>noreply@blogger.com (Alper Konuralp)</author><thr:total>0</thr:total></item></channel></rss>