Tlbimp.exe (Type Library Importer)
The Type Library Importer converts the type definitions found within a COM type library into equivalent definitions in a common language runtime assembly. The output of Tlbimp.exe is a binary file (an assembly) that contains runtime metadata for the types defined within the original type library. You can examine this file with tools such as Ildasm.exe.
https://github.com/dotnet/docs/blob/master/docs/framework/tools/tlbimp-exe-type-library-importer.md
web.config ‘e proxy eklemek
<system.net> <defaultProxy useDefaultCredentials="true"> <proxy usesystemdefault="True" proxyaddress="http://127.X.X.X:8080" bypassonlocal="True" /> </defaultProxy> </system.net>
Is it possible to specify proxy credentials in your web.config?
namespace SomeNameSpace { public class MyProxy : IWebProxy { public ICredentials Credentials { get { return new NetworkCredential("user", "password"); } //or get { return new NetworkCredential("user", "password","domain"); } set { } } public Uri GetProxy(Uri destination) { return new Uri("http://my.proxy:8080"); } public bool IsBypassed(Uri host) { return false; } } }
<defaultProxy enabled="true" useDefaultCredentials="false"> <module type = "SomeNameSpace.MyProxy, SomeAssembly" /> </defaultProxy>
Tasarım Desenleri ve Mimarileri
(HttpWebRequest)WebRequest.Create(url);
try { WebProxy oWebProxy = new WebProxy(ConfigurationManager.AppSettings["ProxyAddress"]) { Credentials = CredentialCache.DefaultCredentials }; string url = "htt://www.yakupkalebasi.com/"; var req = (HttpWebRequest)WebRequest.Create(url); req.Proxy = oWebProxy; req.Method = "GET"; var resp = req.GetResponse(); var outStream = resp.GetResponseStream(); string output = ""; using (StreamReader rdr = new StreamReader(outStream)) { output = rdr.ReadToEnd(); } Response.Write(output); } catch (Exception ex) { Response.Write(ex.Message); }
IP Adres Bulma
public string IP() { string ip = "" if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null) { ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (!string.IsNullOrEmpty(ip)) { string[] ipRange = ip.Split(",".ToCharArray()); ip = ipRange[0]; } } if (string.IsNullOrEmpty(ip)) if (HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] != null) ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString(); ip = ip.Trim(); return ip; }
String Format for DateTime
This site has great examples check it out
// create date time 2008-03-09 16:05:07.123 DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123); String.Format("{0:y yy yyy yyyy}", dt); // "8 08 008 2008" year String.Format("{0:M MM MMM MMMM}", dt); // "3 03 Mar March" month String.Format("{0:d dd ddd dddd}", dt); // "9 09 Sun Sunday" day String.Format("{0:h hh H HH}", dt); // "4 04 16 16" hour 12/24 String.Format("{0:m mm}", dt); // "5 05" minute String.Format("{0:s ss}", dt); // "7 07" second String.Format("{0:f ff fff ffff}", dt); // "1 12 123 1230" sec.fraction String.Format("{0:F FF FFF FFFF}", dt); // "1 12 123 123" without zeroes String.Format("{0:t tt}", dt); // "P PM" A.M. or P.M. String.Format("{0:z zz zzz}", dt); // "-6 -06 -06:00" time zone // month/day numbers without/with leading zeroes String.Format("{0:M/d/yyyy}", dt); // "3/9/2008" String.Format("{0:MM/dd/yyyy}", dt); // "03/09/2008" // day/month names String.Format("{0:ddd, MMM d, yyyy}", dt); // "Sun, Mar 9, 2008" String.Format("{0:dddd, MMMM d, yyyy}", dt); // "Sunday, March 9, 2008" // two/four digit year String.Format("{0:MM/dd/yy}", dt); // "03/09/08" String.Format("{0:MM/dd/yyyy}", dt); // "03/09/2008"
Standard DateTime Formatting
String.Format("{0:t}", dt); // "4:05 PM" ShortTime String.Format("{0:d}", dt); // "3/9/2008" ShortDate String.Format("{0:T}", dt); // "4:05:07 PM" LongTime String.Format("{0:D}", dt); // "Sunday, March 09, 2008" LongDate String.Format("{0:f}", dt); // "Sunday, March 09, 2008 4:05 PM" LongDate+ShortTime String.Format("{0:F}", dt); // "Sunday, March 09, 2008 4:05:07 PM" FullDateTime String.Format("{0:g}", dt); // "3/9/2008 4:05 PM" ShortDate+ShortTime String.Format("{0:G}", dt); // "3/9/2008 4:05:07 PM" ShortDate+LongTime String.Format("{0:m}", dt); // "March 09" MonthDay String.Format("{0:y}", dt); // "March, 2008" YearMonth String.Format("{0:r}", dt); // "Sun, 09 Mar 2008 16:05:07 GMT" RFC1123 String.Format("{0:s}", dt); // "2008-03-09T16:05:07" SortableDateTime String.Format("{0:u}", dt); // "2008-03-09 16:05:07Z" UniversalSortableDateTime /* Specifier DateTimeFormatInfo property Pattern value (for en-US culture) t ShortTimePattern h:mm tt d ShortDatePattern M/d/yyyy T LongTimePattern h:mm:ss tt D LongDatePattern dddd, MMMM dd, yyyy f (combination of D and t) dddd, MMMM dd, yyyy h:mm tt F FullDateTimePattern dddd, MMMM dd, yyyy h:mm:ss tt g (combination of d and t) M/d/yyyy h:mm tt G (combination of d and T) M/d/yyyy h:mm:ss tt m, M MonthDayPattern MMMM dd y, Y YearMonthPattern MMMM, yyyy r, R RFC1123Pattern ddd, dd MMM yyyy HH':'mm':'ss 'GMT' (*) s SortableDateTimePattern yyyy'-'MM'-'dd'T'HH':'mm':'ss (*) u UniversalSortableDateTimePattern yyyy'-'MM'-'dd HH':'mm':'ss'Z' (*) (*) = culture independent */
// create date time 2008-03-09 16:05:07.123 DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123); $"{dt:y yy yyy yyyy}"; // "8 08 008 2008" year $"{dt:M MM MMM MMMM}"; // "3 03 Mar March" month $"{dt:d dd ddd dddd}"; // "9 09 Sun Sunday" day $"{dt:h hh H HH}"; // "4 04 16 16" hour 12/24 $"{dt:m mm}"; // "5 05" minute $"{dt:s ss}"; // "7 07" second $"{dt:f ff fff ffff}"; // "1 12 123 1230" sec.fraction $"{dt:F FF FFF FFFF}"; // "1 12 123 123" without zeroes $"{dt:t tt}"; // "P PM" A.M. or P.M. $"{dt:z zz zzz}"; // "-6 -06 -06:00" time zone // month/day numbers without/with leading zeroes $"{dt:M/d/yyyy}"; // "3/9/2008" $"{dt:MM/dd/yyyy}"; // "03/09/2008" // day/month names $"{dt:ddd, MMM d, yyyy}"; // "Sun, Mar 9, 2008" $"{dt:dddd, MMMM d, yyyy}"; // "Sunday, March 9, 2008" // two/four digit year $"{dt:MM/dd/yy}"; // "03/09/08" $"{dt:MM/dd/yyyy}"; // "03/09/2008"
ASP.NET 4.0’da ClientIDMode ile HTML ID’lerinin kontrolü.
ASP.NET'te en sevmediğim özelliklerden biri yaratılan HTML kodu üzerindeki kontrolün pek de mümkün olmaması. Aslında bu sevmediğim özellik ASP.NET'in işimizi bu kadar kolaylaştırabilmesini sağlayan en önemli altyapısı ile ilişkili. Fakat derdime çare arayacak olsam aslında tam olarak da yaratılan HTML kontrollerinin ID'lerine takıldığımı söyleyebilirim. Boyumu aşan ID'leri kontrol edememek bir de bu ID'lere JavaScript ile ulaşmak zorunda kalmak ölümcül bir deneyim!
Neden bahsediyorsun?
Bahsettiğim şey aslında basit bir Repeater bile olabilir. Örneğin sayfanıza bir Repeater yerleştirdiniz ve içinde de çok basit bir Label bulunuyor. Aslında tek yapmak istediğiniz elinizdeki ürünlerin isimlerini listelemek diyelim. Bu durumda kabaca kullanacağınız Repeater yapısı aşağıdaki gibi olacaktır.
<asp:repeater id="Repeater1" runat="server"> <ItemTemplate> <asp:Label ID="lbl_UrunAdi" runat="server" Text='<%# Eval("Adi") %>'></asp:Label> </ItemTemplate> </asp:repeater>
Peki bu ASP.NET kodu çalıştığında ortaya HTML olarak ne çıkacak dersiniz? Gelin aşağıdaki HTML'i beraber inceleyelim.
Devamı http://daron.yondem.com/software/post/cb60cff9-5cc0-44b0-8dfb-0fc51243c1ae
Windows Server 2012 / IIS 8.0 uygulamalarında tarih formatının “d.M.yyyy” olarak değişmiş olması
Merhaba Arkadaşlar,
Varsayılan tarih formatı “Windows Server 2012” üzerinde, “Windows Server 2008 R2” den farklı olduğu için, IIS uygulamalarınızı IIS 8.0 üzerine taşırken, uygulamanızda kullanmakta olduğunuz tarih formatlarında değişiklik olduğunu farketmiş olabilirsiniz.
Bunu en basitinden aşağıdaki “aspx” kodunu kullanarak test edebilirsiniz. Bu kod “System.DateTime.Now” çıktısını ekrana dökecektir:
Kaynak ve yazının devamı https://blogs.msdn.microsoft.com/devtr/2013/05/22/windows-server-2012-iis-8-0-uygulamalarnda-tarih-formatnn-d-m-yyyy-olarak-deimi-olmas/
Sitenizin culture durumu için aşağıdaki script kullanabilirsiniz.
<script> console.log('Default: ' + '<%=System.DateTime.Now%>'); console.log('Local Time: ' + '<%=System.DateTime.Now.ToLocalTime()%>'); console.log('Short Time: ' + '<%=System.DateTime.Now.ToShortDateString()%>'); console.log('ToString Default: ' + '<%=System.DateTime.Now.ToString()%>'); console.log('Universal Time: ' + '<%=System.DateTime.Now.ToUniversalTime()%>'); console.log('d – Short Date: ' + '<%=System.DateTime.Now.ToString("d")%>'); console.log('g – General: ' + '<%=System.DateTime.Now.ToString("g")%>'); </script>
Online C# Compile
How to change WSDL URL from internal machine name to public?
<serviceBehaviors> <behavior name="<name>"> <!-- Other options would go here --> <useRequestHeadersForMetadataAddress> <defaultPorts> <!-- Use your own port numbers --> <add scheme="http" port="81" /> <add scheme="https" port="444" /> </defaultPorts> </useRequestHeadersForMetadataAddress> </behavior> </serviceBehaviors>
C# Caller Information
namespace CallerInfo { public class CallerInfoExample { public void Log(String logMessage, [CallerMemberName] string callerName="", [CallerLineNumber] int lineNumber=0, [CallerFilePath] string filePath="") { Console.WriteLine("Çağrıldığı Dosya=" + filePath); Console.WriteLine("Çağıran Metod="+callerName); Console.WriteLine("Çağrıldığı Satır Numarası=" + lineNumber); } } } namespace CallerInfo { class Test { static void Main() { CallerInfoExample callerInfo = new CallerInfoExample(); callerInfo.Log("Caller Info Test"); } } }
Mapper kütüphaneleri Performans Testi
Aşağıdaki yazının sonuç kısmını paylaşmak istedim.
4 Farklı renklere ayrılma sebebi 1,10,100 ve 1000 kayıt üzerinde yapılan işlemler sonucunda hangi Mapper türünün ne kadar sürdüğünü ayırtedebilmek için. 4 farklı değerdeki parametre sonucunda mapper türlerinin performans testi sıralamasının bozulmadığını görüyoruz. En performanslı çalışan yöntem Linq Select metodudur. Fakat her dto nesnesi için oluşacak mappingleri kendiniz manuel yapacağınız için bu mapping türünü gözardı edebiliriz bu işi Source, Target eşleşmesi yardımıyla otomatik yapan diğer 4 Mapper kütüphanesine bakacak olursak TinyMapper’in Linq’dan sonra en performanlı Mapper yöntemi olduğu görüyoruz. TinyMapper’i AutoMapper ve Onuda ExpressMapper takip ediyor. Kendi yöntemimiz olan Reflector ile mapper yerlerde sürünüyor Ona hiç bakmaya gerek yok.
Yazıya göre en başarılı olan http://tinymapper.net/ gözüküyor.
http://www.muratoner.net/csharp/mapper-kutuphaneleri-performans-testi
SQL Server Data Types and Their .NET Framework Equivalents
SQL Server data type | CLR data type (SQL Server) | CLR data type (.NET Framework) |
varbinary | SqlBytes, SqlBinary | Byte[] |
binary | SqlBytes, SqlBinary | Byte[] |
varbinary(1), binary(1) | SqlBytes, SqlBinary | byte, Byte[] |
image | None | None |
varchar | None | None |
char | None | None |
nvarchar(1), nchar(1) | SqlChars, SqlString | Char, String, Char[] |
nvarchar | SqlChars, SqlString | String, Char[] |
nchar | SqlChars, SqlString | String, Char[] |
text | None | None |
ntext | None | None |
uniqueidentifier | SqlGuid | Guid |
rowversion | None | Byte[] |
bit | SqlBoolean | Boolean |
tinyint | SqlByte | Byte |
smallint | SqlInt16 | Int16 |
int | SqlInt32 | Int32 |
bigint | SqlInt64 | Int64 |
smallmoney | SqlMoney | Decimal |
money | SqlMoney | Decimal |
numeric | SqlDecimal | Decimal |
decimal | SqlDecimal | Decimal |
real | SqlSingle | Single |
float | SqlDouble | Double |
smalldatetime | SqlDateTime | DateTime |
datetime | SqlDateTime | DateTime |
sql_variant | None | Object |
User-defined type(UDT) | None | user-defined type |
table | None | None |
cursor | None | None |
timestamp | None | None |
xml | SqlXml | None |
c# program info
string _AppName = "<unknown>"; var _MachineName = Environment.MachineName; if (Assembly.GetEntryAssembly() != null) { _AppName = Assembly.GetEntryAssembly().Location; } var _AppDomainFriendlyName = AppDomain.CurrentDomain.FriendlyName; var _UTCTime = DateTime.UtcNow; var _OSPlatform = Environment.OSVersion.Platform.ToString(); var _OSVersion = Environment.OSVersion.Version.ToString(); var _Stack = new StackTrace(0); var _UserDomainName = Environment.UserDomainName; var _UserName = Environment.UserName; var _UserInteractive = Environment.UserInteractive; var _RuntimeVersion = Environment.Version.ToString();
C#’ta Çağıran Metod Bilgilerine Ulaşmak (CallerMemberName)
C# diliyle kodlama yaparken, zaman zaman bazı durumlarda, bir metodun hangi metoddan çağrıldığı, çağıran metod, bilgisine ulaşmamız gerekebiliyor. Örneğin loglama benim aklıma gelen durumlardan birisi, bir başka kullanım sebebi de, hatayı yakalamak olabilir. Bir metod sadece belli bir yerden çağrıldığında hataya düşebilir.
Bu durumlar için c# bize bazı kolaylıklar sunuyor. CallerMemberName özelliği.
Fakat daha önce c# dilinde böyle bir bilgiye nasıl ulaşabiliyorduk. Örnek bir program üzerinden bunu görelim:
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace callermethod { class Program { private static void Add(int i, int j) { StackFrame frame = new StackFrame(1); var method = frame.GetMethod(); var name = method.Name; Console.WriteLine("CallerMethod:" + name); Console.WriteLine("Sum:" + (i + j).ToString()); } private static void MethodB() { Add(6,4); } private static void MethodA() { Add(2, 5); } static void Main(string[] args) { Add(5,6); MethodA(); MethodB(); Console.ReadLine(); } } }
İşaretli kısımlarda göründüğü gibi StackFrame nesnesi oluşturup onun üzerinden istediğimiz bilgiye ulaşıyoruz. Fakat bu yöntem, sistem kaynaklarını fazla tüketen bir alternatif.
Bunun yerine CallerMemberName, CallerFilePath, CallerLineNumber özelliklerini kullanarak, çağıran metod bilgisine ulaşabiliriz.
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; namespace callermethod { class Program { private static void Add( int i, int j, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0 ) { // Çağıran metodun bulunduğu dosyanın pathı, ve satır numarası isteniyorsa // CallerFilePath ve CallerLineNumber kullanılabilir. //Console.WriteLine("CallerFilePath:" + sourceFilePath); //Console.WriteLine("CallerLineNumber:" + sourceLineNumber); Console.WriteLine("CallerMethod:" + memberName); Console.WriteLine("Sum:" + (i + j).ToString()); } private static void MethodB() { Add(6,4); } private static void MethodA() { Add(2, 5); } static void Main(string[] args) { Add(5,6); MethodA(); MethodB(); Console.ReadLine(); } } }
sealed Keyword’ü Nedir? Ne İşe Yarar?
sealed keywordü bir class ve metod modifier(niteleyici)dır. Eğer bir class sealed komutuyla işaretlenmişse o classtan kalıtım yapılamaz. Yani o class başka bir sınıfın base classı olamaz. Ayriyetten bir metod sealed komutuyla işaretleniyorsa o metodtan türetilen sınıfların ilgili metodu override etmeleri önlenir.
Kaynak: http://www.gencayyildiz.com/blog/cta-sealed-keywordu/
MVC Get Attributes
Assembly assembly = Assembly.GetExecutingAssembly(); IEnumerable<Type> types = assembly.GetTypes() .Where( type => typeof(Controller).IsAssignableFrom(type) && type.Name.Replace("Controller", "") == controllerName) .OrderBy(x => x.Name); foreach (Type cls in types) { HelpAttribute helpAttribute = Attribute.GetCustomAttribute(cls, typeof(HelpAttribute)) as HelpAttribute; url = helpAttribute != null ? helpAttribute.Url : string.Empty; ........ }
MVC Get – Controllers, Actions, Attributes and Return Types – 2
Assembly assembly = Assembly.LoadFrom(sAssemblyFileName) IEnumerable<Type> types = assembly.GetTypes().Where(type => typeof(Controller).IsAssignableFrom(type)).OrderBy(x => x.Name); foreach (Type cls in types) { list.Add(cls.Name.Replace("Controller", "")); IEnumerable<MemberInfo> memberInfo = cls.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public).Where(m => !m.GetCustomAttributes(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any()).OrderBy(x => x.Name); foreach (MemberInfo method in memberInfo) { if (method.ReflectedType.IsPublic && !method.IsDefined(typeof(NonActionAttribute))) { list.Add("\t" + method.Name.ToString()); } } }
MVC Get – Controllers, Actions, Attributes and Return Types
Assembly asm = Assembly.GetAssembly(typeof(MyWebDll.MvcApplication)); var controlleractionlist = asm.GetTypes() .Where(type=> typeof(System.Web.Mvc.Controller).IsAssignableFrom(type)) .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public)) .Where(m => !m.GetCustomAttributes(typeof( System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any()) .Select(x => new {Controller = x.DeclaringType.Name, Action = x.Name, ReturnType = x.ReturnType.Name, Attributes = String.Join(",", x.GetCustomAttributes().Select(a => a.GetType().Name.Replace("Attribute",""))) }) .OrderBy(x=>x.Controller).ThenBy(x => x.Action).ToList();
c# Mapping Class
public static class TypeExtensions { public static void MapTo<T, S>(this S source, T target) { Type sourceType = source.GetType(); Type targetType = target.GetType(); var sourceProperties = sourceType.GetProperties(); var targetProperties = targetType.GetProperties(); for (int i = 0; i < sourceProperties.Length; i++) { var currentProperty = sourceProperties[i]; var targetProperty = targetProperties .FirstOrDefault(p => p.Name == currentProperty.Name); if (targetProperty != null) targetProperty.SetValue(target, currentProperty.GetValue(source, null), null); } } }
Class To Html Table
Xml veriyi Class’a Atama
public static T SetXmlDataToViewModel&lt;T&gt;(T oViewModel, string xmlData) { if (string.IsNullOrEmpty(xmlData)) { return oViewModel; } XDocument dataXmlDoc = XDocument.Parse(xmlData); foreach (var prop in typeof(T).GetProperties()) { if (dataXmlDoc.Descendants().SingleOrDefault(p =&gt; p.Name.LocalName == prop.Name) != null) prop.SetValue(oViewModel, Convert.ChangeType(dataXmlDoc.Descendants().SingleOrDefault(p =&gt; p.Name.LocalName == prop.Name).Value, prop.PropertyType)); } return oViewModel; }
C# 6.0 Yenilikleri – Null-conditional operators
Null-conditional operators : Herhangi bir class veya propertyleri null ise bunlara erişmek için null kontrolü yapmadan çok daha basit yolla değerleri çekebiliriz.
int? first = (customers != null) ? customers[0].Orders.Count() : null;
Yukarıdaki kodun yerine aşağıdakini kullanabiliriz.
int? first = customers?[0].Orders?.Count();
Böylece eski compiler’dan kurtulunca artık neler yapabileceğimizi gördük. Daha birçok yeniliğin kapıda olduğunu belirtir bloğumu takip etmenizi tavsiye ederim.
Detaylı Pdf: http://www.borakasmer.com/projects/ctp3-csharp-features.pdf
Kaynak : http://www.borakasmer.com/net-compiler-platform-roslyn/
C# 6.0 Yenilikleri – Exception filters
Exception filters : Yakalanan hatalara filitre konabilmektedir. Böylece belirtilen catch bloğunda sadece tanımlanan exception filtresine uygun exceptionlar yakalanır. Eğer hiçbir filitreye uymayan exception var ise stacktrace kaybolmadan işleme devam edilir. Aşağıdaki örnekte de görüldüğü gibi number değeri 50’den küçük olduğu için en sondaki catch’e düşmekte ve 1 değerini döndürmektedir. Eğer number 50’den büyük olur ise ilk cathc’e düşmekte ve geriye number’ın kendi değeri döndürülmektedir.
public class Point(int x, int y) { string number = "45"; public int GetNumber() { try { int.TryParse(number, out var x); throw new Exception(); return x; } catch (Exception e) if (int.Parse(number) > 50) { return number; } catch (Exception e2) { return 1; } } }
C# 6.0 Yenilikleri – Declaration expressions
Declaration expressions : Expressionlar içerisinde artık tanımlama yapılabilmektedir. Ençok kullanıldığı yerler out parametreleridir.
int.TryParse(number, out var x);
public class Customer { public char[] Strings { get { return "a12b3d".ToCharArray(); } } public List<int> GetResult() { var result = (from s in Strings select int.TryParse(s.ToString(), out int i) ? i : -1).ToList(); return result; } } Customer newCustomer = new Customer(); foreach (int num in newCustomer.GetResult()) { WriteLine(num); }
Kaynak: http://www.borakasmer.com/net-compiler-platform-roslyn/
C# 6.0 Yenilikleri – Extension methods
Extension methods : Extension methodlar projeye using ile eklenebilmektedir.
using System.Linq.Enumerable; class Program { static void Main(string[] args) { var range = Range(5, 17); var odd = Where(range, i => i % 2 == 1); foreach (int num in odd) { WriteLine(num); } ReadLine(); } }
C# 6.0 Yenilikleri – Using static
Using static : Static class’lar using olarak projeye eklenebilmektedir.
using System.Console; using System.Math; class Program { static void Main() { WriteLine(Sqrt(3*3 + 4*4)); } }
C# 6.0 Yenilikleri – Parameters on classes and structs
Parameters on classes and structs : Classlar oluşturulurken constructer olmadan parametre alması sağlanmıştır.
public class RealCustomer(string firstName, string lastName) { public string FirstName { get; } = firstName; public string LastName { get; } = lastName; } RealCustomer relCustomer = new RealCustomer("Yakup", "KALEBAŞI"); WriteLine(relCustomer.FirstName + " " + relCustomer.LastName);
C# 6.0 Yenilikleri – Auto-property enhancements
-
Auto-property enhancements : Propertyler’e değer atanmaması durumunda default değer atanabilmektedir.
public class Customer { public string FirstName { get; set; } = "Yakup"; public string LastName { get; set; } = "KALEBAŞI"; } Customer newCustomer = new Customer(); WriteLine(newCustomer.FirstName + " " + newCustomer.LastName);
.Net Türkçe Tarih Sorununu Düzeltme
Bu işlemi yapabilmek için benim bulduğum iki yol var.
-
Global.asax dosyasındaki "Application_BeginRequest" fonksiyonunun içeriğini aşağıdaki gibi düzenlemek yeterli olacaktır. Not: Hangi formata göre düzenleme yapacaksanız istediğiniz gibi fonksiyonun içeriğini ayarlayabilirsiniz.
protected void Application_BeginRequest() { CultureInfo cInf = new CultureInfo("tr-TR", false); cInf.DateTimeFormat.DateSeparator = "/"; cInf.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"; cInf.DateTimeFormat.LongDatePattern = "dd/MM/yyyy HH:mm:ss tt"; System.Threading.Thread.CurrentThread.CurrentCulture = cInf; System.Threading.Thread.CurrentThread.CurrentUICulture = cInf; }
-
İkinci yol ise IIS üzerinden yapılabilir.
Biri “Wrapper” mı dedi :)
Diyelim bir kütüpane kullanıyorsunuz. Kendi yazdığımız kodun içinden direk o kütüpanenin kodlarına erişmek yerine araya girerek kendi sınıfınız içinden istediğiniz işlemleri kütüpaneye yaptırmaktır.
Kullandığınız kütüphanelerin çoğu, genel amaçlar için yazılmıştır. Dolayısıyla, arayüzleri oldukça ayrıntılı, uzun konfigürasyonlu falan olabilir. Sizin kullanacağınızdan çok daha fazla fonksiyonalite içerebilir. Siz, araya yazacağınız katman ile, bu ayrıntı ve komplike kısmı kendi kodunuzun geri kalanından saklayıp, sanki o kütüphane tam olarak sizin amaçlarınıza hizmet etmek için yazılmış gibi bir arayüz yaratırsınız.
İkinci sebep de şudur: Eğer kütüphaneyi bir gün değiştirmeye kalkarsanız (bu sandığınızdan çok daha sık yaşanan bir durumdur — versiyon değişikliği bile dert olabilir) ve eğer arada bir katman yoksa, o kütüphane fonksiyonlarının kendi kodunuza ne kadar derinlemesine sızmış olduğuna fena halde şaşırabilirsiniz. Halbuki, arada bir katman varsa (kabuk demek geldi içimden, ama onu “shell” eşdeğeri olarak kullanıyoruz) sadece o kısımda kullanım şeklini değiştirince, her şey çözümlüş olur…
Inline – Base64 Image Send Mail
MailMessage oMailMessage = new MailMessage(); int PictureId = 1; string ImgUrl = "Base64Data"; string cidPictureId = "picture" + PictureId; byte[] data = System.Convert.FromBase64String(ImgUrl); MemoryStream ms = new MemoryStream(data); string htmlBody = "<h3>Mail Body İçereği</h3><img src=\"cid:" + cidPictureId + "\">"; AlternateView avHtml = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html); ms.Position = 0; LinkedResource picture = new LinkedResource(ms) { ContentId = cidPictureId }; avHtml.LinkedResources.Add(picture); oMailMessage.AlternateViews.Add(avHtml); oMailMessage.From = new MailAddress("kalebasiyakup@gmail.com", "Yakup From"); oMailMessage.To.Add(new MailAddress("kalebasiyakup@gmail.com", "Yakup To")); oMailMessage.Subject = "A picture using alternate views"; SmtpClient client = new SmtpClient("smtp.sunucu.com"); client.Send(oMailMessage);
SignalR Uygulama Örneği
Custom Functions with Entity Framework
AngularJS MVC Repository
Rijndael Şifreleme Algoritması
Html Barkod
// JavaScript BarCode39 v. 1.0 (c) Lutz Tautenhahn, 2005 // The author grants you a non-exclusive, royalty free, license to use, // modify and redistribute this software. // This software is provided "as is", without a warranty of any kind. string Chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"; string[] Codes = { "111221211","211211112","112211112","212211111","111221112","211221111","112221111","111211212", "211211211","112211211","211112112","112112112","212112111","111122112","211122111","112122111", "111112212","211112211","112112211","111122211","211111122","112111122","212111121","111121122", "211121121","112121121","111111222","211111221","112111221","111121221","221111112","122111112", "222111111","121121112","221121111","122121111","121111212","221111211","122111211","121121211", "121212111","121211121","121112121","111212121"}; string[] BarPic = { "https://www.yakupkalebasi.com/AttachFiles/b.gif", "https://www.yakupkalebasi.com/AttachFiles/w.gif" }; private string Code39(string theX, string theY, int theBarHeight, int theFontHeight, string theBarCodeText, int theBarCodeSize) { StringBuilder stringBuilder = new StringBuilder(); string position = string.Empty; string fontStyle = string.Empty; int barCodeSize = 1; if (theBarCodeSize > 0) barCodeSize = Convert.ToInt32(theBarCodeSize); if (barCodeSize == null) barCodeSize = 1; if (barCodeSize < 1) barCodeSize = 1; if (!string.IsNullOrWhiteSpace(theX) && !string.IsNullOrWhiteSpace(theY)) { position = "position:absolute;left:" + theX + ";top:" + theY + ";"; } if (theFontHeight > 4 && (theBarHeight >= 2 * theFontHeight)) { fontStyle = "style=\"font-size:" + theFontHeight + "px;font-family:Verdana;\""; stringBuilder.Append("<div style=\"" + position + "font-size:" + theFontHeight + "px;font-family:Verdana;\">"); stringBuilder.Append("<table noborder=\"\" cellpadding=\"0\" cellspacing=\"0\">"); stringBuilder.Append("<tr>"); stringBuilder.Append("<td rowspan=\"2\" valign=\"top\">" + CodePics("*", theBarHeight, barCodeSize) + "</td>"); for (int i = 0; i < theBarCodeText.Length; i++) stringBuilder.Append("<td>" + CodePics(theBarCodeText.Substring(i, 1), theBarHeight - theFontHeight - 1, barCodeSize) + "</td>"); stringBuilder.Append("<td rowspan=\"2\" valign=\"top\">" + CodePics("*", theBarHeight, barCodeSize) + "</td>"); stringBuilder.Append("</tr>"); stringBuilder.Append("<tr>"); for (int i = 0; i < theBarCodeText.Length; i++) stringBuilder.Append("<td align=\"center\" " + fontStyle + ">" + theBarCodeText.Substring(i, 1) + "</td>"); stringBuilder.Append("</tr>"); stringBuilder.Append("</table>"); stringBuilder.Append("</div>"); } else { stringBuilder.Append("<div style=\"" + position + "\"><table noborder=\"0\" cellpadding=\"0\" cellspacing=\"0\">"); stringBuilder.Append("<tr>"); stringBuilder.Append("<td>" + CodePics("*", theBarHeight, barCodeSize) + "</td>"); for (int i = 0; i < theBarCodeText.Length; i++) stringBuilder.Append("<td>" + CodePics(theBarCodeText.Substring(i, 1), theBarHeight, barCodeSize) + "</td>"); stringBuilder.Append("<td>" + CodePics("*", theBarHeight, barCodeSize) + "</td>"); stringBuilder.Append("</tr>"); stringBuilder.Append("</table>"); stringBuilder.Append("</div>"); } return stringBuilder.ToString(); } private string CodePics(string theChar, int theHeight, int theSize) { string retVal = ""; string cc = "9"; int counter = Chars.IndexOf(theChar); if (counter >= 0) cc = Codes[counter]; for (counter = 0; counter < cc.Length; counter++) { retVal += "<img src=\"" + BarPic[counter % 2] + "\" width=\"" + ((Convert.ToInt32(cc.Substring(counter, 1)) * (3 * theSize - theSize % 2) - theSize + theSize % 2) / 2) + "\" height=\"" + theHeight + "\">"; } retVal += "<img src=\"" + BarPic[counter % 2] + "\" width=\"" + theSize + "\" height=\"" + theHeight + "\">"; return (retVal); }
Nuget paket oluşturma ve yayınlama
Merhabalar,
Microsoft.NET Paket yönetim aracı olan Nuget üzerinde bir paket oluşturma ve yayınlama aşamalarını anlatacağım.
Paket yönetim platformları kendi yazdığınız ya da daha önce başkaları tarafından yazılan kütüphaneleri kolay ve merkezi olarak kulllanımını sağlar. Yazılım mimarisi içerisinde Cross-Cutting Concern dediğimiz uygulama katmanlarından bağımsız fonksiyonellikler içeren Loglama, Exception Handling, Security, Caching, Transaction gibi konular üzerinde kütüphaneler yayınlanır ve herkes tarafından kullanılır. Nuget Gallery paket yönetim uygulaması açık kaynak kodlu ve dolayısıyla kendi nuget gallerimiz için kurabiliriz.
c# hata satır,method ve dosya bulma
// satır numarasına erişebilmek için true değerini atıyoruz StackTrace trace = new StackTrace(true); foreach (StackFrame frame in trace.GetFrames()) { if (!string.IsNullOrEmpty(frame.GetFileName())) { Console.WriteLine(frame.GetFileLineNumber()); Console.WriteLine(frame.GetMethod()); Console.WriteLine(frame.GetFileName()); Console.WriteLine("------------------------------------"); int sonHane = frame.GetFileName().LastIndexOf("\\"); int toplamUzunluk = frame.GetFileName().Length; string hataForm = frame.GetFileName().Substring(sonHane + 1, toplamUzunluk - sonHane - 1); string hataMethod = frame.GetMethod().Name; int hataSatir = frame.GetFileLineNumber(); LogKaydet(hataForm, hataMethod, hataSatir); } }
WCF Log tutmak için gerekli olan web.config ayarları
System.serviceModel içine eklenecek olan, </system.serviceModel> <diagnostics> <messageLogging logMalformedMessages="true" logMessagesAtTransportLevel="true" /> </diagnostics> </system.serviceModel> Web config içine System.diagnotics içeriği, <system.diagnostics> <sources> <source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing"> <listeners> <add type="System.Diagnostics.DefaultTraceListener" name="Default"> <filter type="" /> </add> <add name="ServiceModelMessageLoggingListener"> <filter type="" /> </add> </listeners> </source> <source propagateActivity="true" name="System.ServiceModel" switchValue="Warning,ActivityTracing"> <listeners> <add type="System.Diagnostics.DefaultTraceListener" name="Default"> <filter type="" /> </add> <add name="ServiceModelTraceListener"> <filter type="" /> </add> </listeners> </source> </sources> <sharedListeners> <add initializeData="x:\Log\Client.dll_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp"> <filter type="" /> </add> <add initializeData="x:\Log\Client.dll_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp"> <filter type="" /> </add> </sharedListeners> </system.diagnostics>
WCF – MaxItemsInObjectGraph Error
Visual Source Safe e Hızlı Bir Bakış
Visual SourceSafe ile çalışmak
Çalışırken aslında ihtiyacınız olan ve bilmeniz gereken üç tane komut var,
- Check Out
- Check In
- Get Latest Version
Check Out dosyanın düzenlenmesinin sizde olduğunu anlatır, böylece başkası dosya üzerinde işlem yapamaz (2005 sürümünde, özellikle Team System ile birlikte öne çıkarıla bir özelliği ise aynı anda Check In yapılabilme yeteneği, şöyle düşünelim, ben bir vb dosyasına a methodunu ekliyorum, başkası aynı vb dosyasına b methodunu ekliyor, o vb dosyasında metotlarımız karışmadan alt alta ekleniyor. Peki farklı iki kişi aynı dosyanın bir metodunu editlemiş ise ne oluyor ? VISUAL SOURCESAFE uyarı veriyor ve hangi şekilde düzenlenmesini istediğinizi soruyor) başkasının dosya üzerinde işlem yapamamasının sebebi Visual SourceSafe o dosyayı veri tabanında kilitler ve başkasının düzenlemesine izin vermez. Taaki sizin işiniz bitene, yani Check In yapana kadar.
Check In işlemi, sizin dosyayı düzenledikten sonra düzenlenmiş hali en son halidir deyip, Visual SourceSafe e yolladığınız halidir. Böylece sizin dosya ile işiniz bitmiştir ve başka kullanıcılar alıp, onu düzenleyebilir haldedir.
Get Latest Version işlemi ise Check In yapılan dosyaların en son sürümlerinin Visual SourceSafe de saklanılan hallerini benim localimdeki çalıştığım dosyalarla değiştir demek oluyor. Böylece sizde projenin en yeni hali oluyor. Get Latest Version ile ilgili birşey eklemek istiyorum her zaman iki kere Get Latest Version yapın..:)
http://www.yazilimgunlugu.com/visual-source-safe-e-hizli-bir-bakis-makalesi/280.aspx
http://www.estanbul.com/bir-projenin-visual-source-safe-ile-entegrasyonu-122327.html#.VHWu_4usWVM
pdf Dosyası oluşturma
Dictionary, Literal ve Serialization kullanımı
Dictionary, Literal ve Serialization kullanımı için örnek dosya ornek_1
C# Temel bilgiler . . .
C# sealed Anahtar Sözcüğü => http://onursalkaya.blogspot.com.tr/2011/12/c-sealed-anahtar-sozcugu.html
C# Inheritance => http://onursalkaya.blogspot.com.tr/2011/03/c-inheritance.html