Tags: , | Categories: SSS (FAQ), Tip, Web Uygulaması Posted by okutbay on 11.10.2018 18:56 | Yorumlar (0)

Selamlar herkese,

Sanırım bir başlığı açmam gerekecek. ASP.NET Core MVC ile geliştirdiğim web uygulamasını nasıl güncelleyiyorum? Size bu yazımda biraz bundan bahsetmek istiyorum.

Geliştirme ortamı olarak Visual Studio 2017 kullanıyorum ancak Visual Interdev'den bu yana çok uzun yıllardır burada pek bir değişiklik olmadı. O yüzden gelecekte de köklü bir değişiklik beklemiyorum.

Öncelikli olarak kendi geliştirme ortamınızda değişikliklerinizi yaptınız. Varsa testlerinizi çalıştırdınız, yoksa kodunuzun işlevlerini fonksiyonel olarak test ettiniz, her şeyin olması gibi çalıştığına kanaat getirip canlı ortamdaki uygulamanızı güncellemeye karar verdiniz.

Şimdi size adım adım izlediğim yolu ve püf noktalarını vermeye çalışacağım.

Sahnenin Kurulması

Daha önce bir ya da bir kaç release çıktığım bir projeyi güncelleyeceğim. O yüzden sistemde hazırlanmış release dosyaları olması muhtemel. Hatta başka projeler de olabilir. O nedenle ben şöyle bir klasör yapısı kullanmayı uygun görüyorum: "C:\Projeler\Release\ProjeAdi\UygulamaAdi"

Örnek ile açıklamam gerekirsetüm kaynak kodları C:\Projeler altında dururken tüm çıktığım paketleri C:\Projeler\Release klasörü altında topluyorum. Ancak bunu yaparken de bir proje altında birden fazla deploy edilmesi gereken web uygulaması, API vb. olabileceği için proje adıyla açtığım klasörün altında da ürün ya da uygulama adıyla açılmış bir klasör içine publish ediyorum. Mesela bugün URLSohertener adlı projenin URLShortener.Web uygulamasını güncelleyeceğim için bu uygulamaya publish çıkacağız.

Publish edilecek folder ve üst folder içinde şu an bulunan dosyalar şunlar:

 

Görüldüğü üzere uygulama adının yanında tarihler yazan bazı rar dosyalar var. Bunlar önceki çıkılan publishlerin sıkıştırılmış yedekleri. Ben yöntem olarak çıktığım her release paketini sıkıştırılmış ve tarihlenmiş olarak saklıyorum. Tarihler neden önemli birazdan göreceğiz.

Not: Tabi ki CI/CD ile yapmak çok şık olur ama bireysel olarak bir şeyler yapmaya çalışırken her şeyi dört dörtlük yapmaktan önce ortaya birşeyler (MVP - Minimum Viable Product) çıkartıp insanların kullanımına sunmak daha öncelikli bir hal alıyor.

 

Publish (Release) Çıkılması

Visiual Studio ile açık olan solution üzerinde publish yapılacak projeadı üzerine faremizle ters tıklayarak combo menünün açılmasını sağlarız.

 
Açılan kombo menü üzerinde "Publish" seçeneğine tıklayarak projeye ait daha oluşturulmuş publish profil detaylarının görüntülendiği ekran çıkacaktır.
 
 
 
Ekran görüntüsünde görüleceği üzere burada publish profil adı ve publish butonun dışında nereye publish yapılacağı, mevcut dosyaların silinip silinmeyeceği, yapılacak publish için debug/release konfigurasyonu bulunmakta.
Her zaman bu ekran üzerinde yeni bir profil tanımlayabileceğiniz gibi actions altından profil adını değiştirme ve profil silme işlemini yapabilirsiniz. Mevcut profil ayarlarını değiştirmek isterseniz "Configure..." bağlantısına tıklamanız yeterli olacaktır. Bu ekranda target locatio'a gitmek isterseniz tıklanabilir bir link konulmamış ama yolu clipboarda kopyalayabilmeniz için ufak bir buton eklenmiş.
 
Daha önce publish yapmadıysanız ilk seferde buradaki detayları ayarlamanız gerekebilir. O yüzden "Configure..." bağlantısına tıklayarak nasıl bir şeyle karşılacağınızı biraz anlatmak istiyorum.
 
 
Bağlantıya tıkladığınızda açılan popup ekranda sizi "Connection" ayarları karşılar.Bu ayarlar Publish Method ve Target Location ayarlarıdır.
 
Bu ayarlar içinde Publish method ile 4 farklı metoddan birini seçebilirsiniz.
 
 
Hepsinin detaylarına giremeyiz ama isimleri aslında ne olduklarını anlatıyor.
 
Biz "File System" seçiyoruz. Dosyaları harddiskimizde belirlediğimiz yere (Target Location) bırakmasını isteyeceğiz. Target Location ayarında yukarıda ayarladığımız klasörlerin seçili olduğunu göreceksiniz. 
 
Next butonuna tıklayarak sonraki ayar ekranına geçebiliriz. Bu ekranda bizi karşılayan ayarlar Configuration, Target Framewok, Deployment Mode, Target Runtime, File Publish Options, Database ayarları bulunmakta
 
 
 
Burada işler biraz karışıyor. Bu ekran gerçekten ne yaptığınızı bilmenizi gerektiren bir ekran. Bu nedenle bu ayarlara biraz daha detaylı bakalım.
Configuration (Debug/Release): Burada Release/Debug seçimi yaparak derlenecek dosyalaradebug yapmanızı kolaylaştıran ilavelerin yapılıp yapılmayacağına karar verirsiniz. Test ortamları dışında canlı ortamlara yapılacak publishler için kesinlikle "Release"seçilmelidir. Çünkü debug yapılacak şekilde derlenen kodların performansı daha düşük olacak ve canlı ortamda gereksiz performans kayıplarına neden olacaktır.
Target Framewok: Açıkçası burada sadece sistemde yüklü olan frameworkler listeleniyor mu yoksa sadece uygulamanın frameworkü mü listeleniyor bilmiyorum. Yani uygulamayı desteklenen farklı frameworkler release edebiliyor muyum fikrim yok. Muhtemelen sadece uyumlu olanı listeliyor. Çünkü sistemimde .NET Framework 4.7.2 olduğu biliyorum ama burada çıkmıyor.
Deployment Mode (Framework-dependent/Self-Contained): Bunu incelemedim ama isimlerinden anladığım kadarıyla self-contained seçildiği zaman gerekli framework dosyalarını da içerecek şekilde pakete ekliyor ve paketi şişiriyor diye tahmin ediyorum. O yüzden kurulum yapacağım sunucuda framework olduğu için ben Framework-dependent olarak ayarlıyorum.
Target Runtime (Portable/win-x86/win-x64/osx-x64/linux-x64): Burada kurulum yapılacak sunucun işletim sistemi ve işlemci mimarisine göre karar verebilirsiniz ya da benim gibi portable seçerek herhangi bir işletim sisteminde çalışacak şekilde paketinizi oluşturabilirsiniz. Paketiniz şimesin benim tek platform ile işim olur diyorsanız portable yerine onu seçmeniz önerilir.
File Publish Options: İşaretleyerek önceki publishe ait dosyaları silerek temiz bir klasör içine publish çıkılmasını sağlayabilirsiniz. Ben genelde bunu işaretliyorum. Değişen giden bir kütüphane, dosya vb. var ise paketin içinde kalmaya devam ederek şişkinlik yapsın istemiyorum.
Database: Eğer projenizde SQL server vb. ayarlanmış bir database var ise onunla ilgili bir bilgi veriyor. Ben MongoDB kullandığım için ne işe yarar, ne çıkar burada bir fikrim yok.
 
Temel konulara değindiğimize göre atrık publish butonuna tıklayabilir ve publish işleminin tamamlanmasını bekleyebiliriz. İlerlemeyi Web Publish Activity ekranında takip edebilirken, olup biteni detaylı olarak görmek için "Output" ekranına göz atabiliriz.
 
 
 
 
Evet publish'i çıktık ve deploymen aşamasına geçebilir dosyaları sunucuya atarak canlı ortamdaki yazılımın güncellenmesini sağlayabiliriz.
 
 
 

 

Deployment: Tam (Full) veya kısmi (parital)?

Publish sonunda projenin çalışması için gerekli tüm dosyaları dosya sisteminde oluşturduk.Bunların hepsini sunucuya kopyalabileceğiniz gibi sadece son deploymenttan sonra değişen dosyaların kopyalanmasını (partial deployment) terich edebilirsiniz.
 
Eğer partial deployment yapmaya karar verirseniz işte bu noktada hatırlarsanız yukarıda "Ben yöntem olarak çıktığım her release paketini sıkıştırılmış ve tarihlenmiş olarak saklıyorum. Tarihler neden önemli birazdan göreceğiz. " demiştim. Daha önce yapılmış olan deployment paketlerini sakladığım için son deployment tarihini hatırlamak gibi bir dertten kurtulmuş oluyorum.
 
Dosyaları publish ettim klasördeyken arama kutusuna şunu yazıyorum "datemodified:<={son-paket-tarihi}". Eğer yedekler içindeki en günce paket tarihi 31 Ağustos 2018 ise şu şekilde yazıyorum "datemodified:‎<=31.‎08.‎201".Böylece dosya sistemim benim için bu tarih dahil olacak şekilde eski dosyaları göstermiş oluyor. Tek yapmanız gereken listelenmiş dosyaları seçerek silmek ve sadece son deploymenttan bu yana değişmiş olan dosyaların kalmasını sağlamak
 
 
 
BONUS: Aynı günde yapılan farklı deployment durumlarında tarih yanına saat de yazabilirsiniz. Örnek: datemodified:‎<11.‎10.‎2018 13:00
 
Artık son adım olarak bu pakete dahil olan dosyaları klasörü ile sıkıştırıp, dosya adına tarih ekleyerek yedek olarak bir kenarda durmasını sağlarız.
 
Bu dosyayı aynı zamanda sunucumuza dosyaları kopyalamak için de kullanacağız.
 

Son Adım

Oluşturduğumuz publish dosyasını sunucumuza taşırız. Burada ister FTP yap, ister RDP o dosya sunucuna kopyalansın yeterki :D
Sonrasında ben şu adımları izliyorum. Bir tane deployment klasörüm var. Sıkıştırılmış dosya içeriklerini buraya açıyorum.
Publish yapılacak web uygulamasının bulunduğu klasörü her ihtimale karşı sıkıştırıp, tarih vererek yedekliyorum.
IIS kullanıyorsanız uygulamayı ve application poou durdururak kilitli dosyalar varsa bırakılmasını sağlıyoruz ki kopyalamada sorun çıkmasın.
Sonrasında deployment klasörüne açtığımız dosyaları uygulama klasöründeki dosyaları ezerek kopyalıyoruz.
Bu noktada en önemli konu eğer development için ayrı ayrı config dosyasınız yoksa ise canlı ortamdaki config dosyasınızı ezmeden varsa yeni eklenen ayarları bu dosyaya manuel olarak eklemektir.
Artık uygulamayı güncellediğimize göre tekrar IISde application pool ve uygulamayı start ediyoruz. Uygulama adresine gittiğimizde açılıyorsa ne mutlu bize. Haydi geçmiş olsun.
 
Bir başka yazımızda buluşmak üzere. Klavyeleriniz şen ola.
 
Ozan Kutlu Bayram
 
 

 
 
 
 
 
 

 
 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , | Categories: Genel, Security Posted by okutbay on 27.05.2013 19:21 | Yorumlar (0)

Yeni bilgisayarım windows 8 olduğu için alışma ve öğrenme sürecinden geçiyorum. Bu süreç içinde bazen bildiğiniz şeyleri tamamen unutmanız ya da farklı bir açıdan yaklaşmanız gerekebilmekte.

Önceki windows 7 ve vista sürümlerinde User Access Control - UAC denen özelliği tamamen kapatabiliyorduk. Böylece her admin hesabımızla her uygulama için run as administrator demek zorunda kalmıyorduk.

Windows 8i de alınca ilk yaptığım UAC kapatmak olmuştu. Ancak bugün fark ettimki bildiğimiz yöntemlerle bunu kapatamıyoruz. Sadece sessiz modda çalışmasını sağlayabiliyoruz. Şimdilik bunu aşmanın bir yolunu bulabilmiş değilim. Bir çözüm bulana kadar uygulamaları  "Run As Administrator" diyerek çalıştırmaktan başka bir yol kalmıyor. Ama en azından bunun kolay bir yolu var ver uygulamayı her çalıştırışınızda bir kaç klik tasarruf etmenizi sağlayacaktır.

Uygulama kısayol dosyasına ters tıklayıp özelliklere girin. Açılan pencerede kısayol sekmesinde bulunan gelişmiş butonuna tıklayarak açılan pencerede "Run As Administrator" kutucuğunu işaretleyin ve uygulamanız sürekli admin yetkileri ile çalışsın.

 

 

Adım 1: Uygulama kısayol dosyasına ters tıklayıp özelliklere girin
 
Adım 2: kısayol sekmesinde bulunan gelişmiş butonuna tıklayın 
 
Adım 3: açılan pencerede "Run As Administrator" kutucuğunu işaretleyin
 
 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , | Categories: IDE, Programlama, Tip Posted by okutbay on 16.09.2011 21:42 | Yorumlar (0)

.NET uygulamalari gelistirirken Visual Studio versiyonlarini kullanmayi tercih ediyoruz. Tabi yıllar içinde Framework versiyonları ile beraber visual studio versiyonlari da değişti. Değişmeyen bir tek şey kaldı benim için. Her kurulum sonrasında Windows > Close All Documents için bir kısayol ataması yapmak...

Benim tercihim Shift + Ctrl + F4...  

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Categories: Genel, IDE, Tip Posted by okutbay on 25.02.2010 19:08 | Yorumlar (0)

If you're working with lot of projects, or you want to release your DLL to specific location you may need to add some extra actions to to your build.

For example. You have project that uses a DLL of another project of another solution. Sometimes you build your DLL in debug mode, sometimes you build your DLL in release mode. When you build your class library output directory depends on the build mode. Question is: Which DLL will be referenced by your project? To prevent this confusion you can add an copy operation to your post-build events. Then reference the copied DLL.

Here is the sample macro to do this:

cd $(OutDir)
copy $(TargetFileName) D:\Sources\DLLReferences\MyProjectOutpu

Just go to your project properties. Switch "Build Events" tab. Add this sample macro to Post-build event command line. When you build your it will copy result file to specified location.

build-events

Figure 1: Build events window of your project.

post-build-events-command-line-window

Figure 2: A Build event Command line window

You can find a list of macros and their descriptions here:

$(ConfigurationName)

The name of the current project configuration, for example, "Debug|Any CPU".

$(OutDir)

Path to the output file directory, relative to the project directory. This resolves to the value for the Output Directory property. It includes the trailing backslash '\'.

$(DevEnvDir)

The installation directory of Visual Studio 2005 (defined with drive and path); includes the trailing backslash '\'.

$(PlatformName)

The name of the currently targeted platform. For example, "AnyCPU".

$(ProjectDir)

The directory of the project (defined with drive and path); includes the trailing backslash '\'.

$(ProjectPath)

The absolute path name of the project (defined with drive, path, base name, and file extension).

$(ProjectName)

The base name of the project.

$(ProjectFileName)

The file name of the project (defined with base name and file extension).

$(ProjectExt)

The file extension of the project. It includes the '.' before the file extension.

$(SolutionDir)

The directory of the solution (defined with drive and path); includes the trailing backslash '\'.

$(SolutionPath)

The absolute path name of the solution (defined with drive, path, base name, and file extension).

$(SolutionName)

The base name of the solution.

$(SolutionFileName)

The file name of the solution (defined with base name and file extension).

$(SolutionExt)

The file extension of the solution. It includes the '.' before the file extension.

$(TargetDir)

The directory of the primary output file for the build (defined with drive and path). It includes the trailing backslash '\'.

$(TargetPath)

The absolute path name of the primary output file for the build (defined with drive, path, base name, and file extension).

$(TargetName)

The base name of the primary output file for the build.

$(TargetFileName)

The file name of the primary output file for the build (defined as base name and file extension).

$(TargetExt)

The file extension of the primary output file for the build. It includes the '.' before the file extension.

Reference: Pre-build Event/Post-build Event Command Line Dialog Box

 

Örnek:

cd $(OutDir)

copy $(TargetFileName) C:\_References\Fabrikafa\$(ProjectName)

copy *.txt C:\_References\Fabrikafa\$(ProjectName)

 

 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , | Categories: News Posted by okutbay on 10.11.2009 17:05 | Yorumlar (0)

this is the announcement of the release date for VS 2010 and .NET Framework 4.0 of March 22, 2010!

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5