coolwolf / 27/09/2018

MVC’de Controller açıklamaları eklemek ve bu açıklamaları listelemek

Controller adının üzerine Description attribute ekliyoruz:

[Description("Benim Çok Çalışan Kontrollerim")]
public class MyController : Controller
{
}

ardından uygulamamızdaki tüm controller’leri ve içlerindeki metodları listelemek için aşağıdaki fonksiyonu kullanabiliriz:
 

Assembly assembly = Assembly.GetExecutingAssembly();
IEnumerable types = assembly.GetTypes().Where(type => typeof(Controller).IsAssignableFrom(type)).OrderBy(x => x.Name);
List _controllers = new List();
List _methods = new List();
foreach (Type cls in types)
{
	AttributeCollection attributes =TypeDescriptor.GetProperties(this)[cls.Name].Attributes;
	DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)];
	_controllers.Add(new SelectListItem() { Text= myAttribute.Description, Value= cls.Name.Replace("Controller", "") });
	IEnumerable 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)))
		{
			_methods.Add(new SelectListItem() { Text=method.Name.ToString() });
		}
	}
}

coolwolf / 07/11/2013

C# OpenFileDialog

 
C# dilinde, sürücüde bulunan dosyalardan birini seçmek için kullanılan openfiledialog komutuna küçük bir örnek :
Title özelliği, dosya seçme penceresinin başlığını belirler.
Filter özelliği gösterilecek dosya türlerini belirler.

OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "Please select the LOG File";
ofd.Filter = "Log Files (*.log)|*.log";
ofd.ShowDialog();
txtLogFile.Text = ofd.FileName;

coolwolf / 31/05/2013

C dilinde fonksiyonlar

Basitçe fonksiyon yazımı :

#include
void YaziYaz(char* yazi);
void main()
{
    YaziYaz("Merhaba");
}
void YaziYaz(char* yazi)
{
	printf(yazi);
}
Merhaba
Process returned 0 (0x0)   execution time : 0.016 s
Press any key to continue.

Üstteki örnek YaziYaz fonksiyonuna “Merhaba”  diye bir string gönderiyor. YaziYaz  fonksiyonu da verilen stringi ekrana yazıyor.
Aşağıda fonksiyondan nasıl değer döndüreceğimiz gösterilmiştir :

#include <stdio.h>
char* YaziYaz(char* yazi);
void main()
{
    char* sonuc=YaziYaz("Merhaba\n");
    printf(sonuc);
}
char* YaziYaz(char* yazi)
{
	printf(yazi);
	return "Yazdim yaziyi\n";
}
Merhaba
Yazdim yaziyi
Process returned 0 (0x0)   execution time : 0.019 s
Press any key to continue.

Yukarıdaki örneklerde dikkat ederseniz main() fonksiyonunun üstüne YaziYaz fonksiyonunu nasıl kullanacağımız tanımlanmıştır. Normalde fonksiyonların ne şekilde kullanılacağı .h uzantılı header dosyalarında yer alır. Şimdilik aynı dosyada yazdık. Başka örneklerde biz de header dosyası kullanacağız.

coolwolf / 31/05/2013

C dilinde ifadeler

IF ifadesi :

if(koşul) {kodlarım;}
------------------------------------------------
if(koşul) {doğruysa kodum;} else {yanlışsa kodum;}
------------------------------------------------
if(koşul 1) {kod 1;}
else if (koşul 2) kod 2;
else if (koşul 3) kod 3;
......
else if (koşul n-1) kod n-1;
else {n} kod;
------------------------------------------------

Örnek 1 eğer x ve y eşit değilse ekrana x ve y’nin değerlerini yazar:

if(x!=y) printf ("x=%d,y=%d\n",x,y);

Örnek 2 eğer x y’den büyükse degiskenim’in değeri x’e eşitlenir, değilse degiskenim’in değeri y’ye eşitlenir :

if(x>y) degiskenim= x; else degiskenim= y;

Switch / Case ifadesi :
Verilen değere göre hızlı işlem yapmaya yardımcı olur. Örnek :
Harf olarak verilen notun hangi sayı aralığında olduğunu gösterir.

#include
#include
int main()
{
    char notunuz;
    printf("Notunuz :");
    scanf("%c",&notunuz);
    switch (notunuz)
    {
    case 'A':
        printf ("90 ~ 100\n");
        break;
    case 'B':
        printf ("80 ~ 90\n");
        break;
    case 'C':
        printf ("70 ~ 80\n");
        break;
    case 'D':
        printf ("60 ~ 70\n");
        break;
    case 'E':
        printf ("<60\n");
        break;
    default:
        printf ("error\n");
    }
}

Kaya arkadaşımızın isteği üzerine, not’u rakam olarak yazdığında harf karşılığını veren program :
NOT: switch case içerisinde aralıklı koşul kullanılamadığı için if else ile yaptım, kendisinin affına sığınıyorum.

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int notunuz;
    printf("Notunuz :");
    scanf("%d",&notunuz);
    if(notunuz>=90&&notunuz<=100) printf ("A\n");
    else if(notunuz>=80&&notunuz<90) printf ("B\n");
    else if(notunuz>=70&&notunuz<80) printf ("C\n");
    else if(notunuz>=60&&notunuz<70) printf ("D\n");
    else if(notunuz<60) printf ("E\n");
    else printf ("error\n");
}

while ifadesi
while içerisinde belirtilen şart geçerli olduğu sürece döngü içerisindeki işlemler tekrar edilir. Örnekte sayı değişkeni 0’dan büyük olduğu sürece ekrana sayıyı yazar.

int sayi=10;   //değeri 10 olan bir değişken tanımla
while(sayi>0) //değişkenin dğeri 0'dan büyük oldu sürece aşağıdakileri yap
{
   printf("Sayı %d\n",sayi); //ekrana geçerli sayıyı yaz
   sayi--; //değişkenin değerini bir azalt.
}

do while ifadesi
while ifadesi değeri en başta kontrol ederken, do while ile değeri işlem sonucunda kontrol ediyoruz.
for ifadesi

for(koşul1;koşul2;koşul3)
{
   işlemlerim;
}

koşul1’den başlayarak koşul2’ye kadar, her adımda koşul3’ü yaparak tekrar et.

int i=0;
for(i=0;i<10;i++)
{
  printf("Sıfırdan dokuza kadar sayıları yazar. Sayı : %d\n",i);
}
===================================
int i=0;
for(i=10;i>0;i--)
{
   printf("Ondan bire kadar geriye doğru yazar. Sayı : %d\n",i);
}

coolwolf / 16/03/2013

Obfuscators (code encryptors) for .net

obfuscate
Because of dotfuscator coming with visual studio gives very entry level !protection, i had to use another obfuscator.
A few months ago i had maked a little google search. then i found Eazfuscator. It was enough for a singe developer like me. But in time Eazfuscator become commercial and i had to stop encrypting my software publications. It was not a big problem because most of my software has local install source.
But last week i had to distribute a software on my web site. For some reasons i can not share its source code. So the solution is to obfuscate (encrypt) the code. So i started again to found a replacement for eazfuscator.
Here i will share my experiments.
1. Eazfuscator  ($399):
Ofcourse my first try was eazfuscator. Because it is very easy to use it. You just install it. Then drag solution into eazfuscator’s green area. That’s all. Whenever you build and publish your project it will be obfuscated. You do not have to do additional steps.
It is not very expensive. $399 is acceptible price. I decide to use it in trial period (30 days) and then buy it. But when i install and use the eazfuscator, it show me “builded applciation will not work after 7 days”. I can not buy it in 7 days. In this step i continue my research for alternative obfuscator.
2. Orange Heap (free):
I heard it before. Download and installation was easy. After that it show me a screen. You choose the source and destionaton folder. As i understand after that the applciation obfuscate the executables and puts in the output folder. In comparison to eazfuscator it is not easy for me. I am using clickonce to publish my applications. So i rght click on my solutions in visual studio and choose publish. This is the way i publish my applicastions. When using eazfuscator i do not have to do additional steps. With orange heap i have to create executables first. Then use another installer than clickonce and also another than visual studio installer project. You can use install project in visual studio. But you have to configure the installer project. Ofcours i make a search on the google. May be another one think this is not easy and made a tutorial how to use orange heap with visual studio. But no success. I read the help file in pdf format (it is included with installation). There are good samples. But there is no information about how to integrate with visual studio. At he end i decide to do not use orange heap. When i use another installer orange heap will be my choice.
3. NToolbox Yano (free):
No visual studio integration.
4. The Enigma Protector ($149):
No visual studio integration.
5. Phoenix Protector (free) :
No Visual Studio integration.
6. ILProtector (free) :
From these address add the following code to your post build event. Do not forgot: it will protect only RELEASE builds. Debug builds will not be protected.
On 32 bit windows :

if /I "$(ConfigurationName)" == "Release" "c:\Program Files\VgrSoft\ILProtector\ILProtector.exe" "$(TargetPath)" -nologo

On 64 Windows :

if /I "$(ConfigurationName)" == "Release" "c:\Program Files (x86)\VgrSoft\ILProtector\ILProtector.exe" "$(TargetPath)" -nologo

I have another obfuscators to try. I will share my expreiences here. If you have anything to add to this post, please be free. Just specify in the comment, i will ad your suggestion to this post.
Decompilers (reflectors) i used to try opening obfuscated source code :
ILsPy
JustDecompile
Red Gate reflector (trial)
.