Posts
349
Comments
104
Trackbacks
4
Monday, July 19, 2010
Whitepaper über die Neuerungen in ASP.Net 4.0 und Visual Studio 2010

Ein Whitepaper von Microsoft mit einer Übersicht über die Neuerungen in ASP.Net 4.0 und Visual Studio 2010 findet man hier: http://www.asp.net/learn/whitepapers/aspnet4.

posted @ Monday, July 19, 2010 1:44 PM | Feedback (0)
Sunday, July 18, 2010
Beispiele für Binding-Methoden in ASP.NET 4.0 / AJAX

Die JavaScript-Bibliotheken für das neue AJAX-Framework kann man sich bei Codeplex herunterladen: http://aspnet.codeplex.com/releases/view/34488.

Diese Dateien müssen z.B. im Script-Verzeichnis eine Webanwendung liegen.

Einen Artikel über LiveBinding von Dino Esposito findet man hier: http://msdn.microsoft.com/en-us/magazine/ee819084.aspx.

Das Binding-Objekt ermöglicht es zwei Eigenschaften von zwei DOM Elementen miteinander zu verbinden.

Im folgenden ein kleines Beispiel für die eine Auswahl von  Binding-Methoden und zwar eine One-Way Bindung:

Wenn in der Textbox ein Wert eingetragen wird, dann erscheint dieser anschließend im H1-Tag:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head
>
    <title></title>
</head>
<
body
>
Wert eingeben: <input id="txtName" type="text"
/>
<h1 id="lblName"></h1>
    <script src="scripts/MicrosoftAjax.debug.js" type="text/javascript"></script>
    <script src="scripts/MicrosoftAjaxTemplates.debug.js" type="text/javascript"></script>
    <script type="text/javascript">
        function pageLoad() {
            $create(Sys.Binding, {
                source: $get('txtName'),
                path: 'value',
                target: $get('lblName'),
                targetProperty: 'innerHTML'
            });
        }
    </script>
</body>
</
html>

Im folgenden ein Beispiel mit einer two-way Verbindung zwischen zwei Textboxen. Wird in einer Textbox etwas geändert, dann wird die andere automatisch aktualisiert:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns
="http://www.w3.org/1999/xhtml">
<
head
>
    <title></title
>
</
head
>
<body
>
    Name: <input id="Text1" type="text" />
    <script src="scripts/MicrosoftAjax.debug.js" type="text/javascript"></script
>
    <script src="scripts/MicrosoftAjaxTemplates.debug.js" type="text/javascript"></script
>
    <script type
="text/javascript">
        var person = {
           
Name: "Christian"
        };
       
// Wenn das Objekt person geändert wird (durch Änderungen in der Textbox)
       
// dann soll dieser Event aufgerufen werden
       
Sys.Observer.addPropertyChanged(person, function() {
           
alert('Die Person wurde geändert');
       
});
        function pageLoad() {
            $create(Sys.Binding, {
                source: person,
                path: 'Name',
                target: $get('Text1'),
                targetProperty: 'value',
            })
        }
    </script
>
</body>
</
html>

posted @ Sunday, July 18, 2010 12:03 PM | Feedback (0)
Friday, July 16, 2010
Beispiele für Observer-Methoden in ASP.NET 4.0 / AJAX

Die JavaScript-Bibliotheken für das neue AJAX-Framework kann man sich bei Codeplex herunterladen: http://aspnet.codeplex.com/releases/view/34488.

Diese Dateien müssen z.B. im Script-Verzeichnis eine Webanwendung liegen und in die Seite eingebunden sein.

Im folgenden ein kleines Beispiel für die eine Auswahl von  Observer Methoden (Eine Übersicht der Observer-Methoden findet man hier: http://msdn.microsoft.com/en-us/library/dd393766.aspx).

Die Observer Funktion des AJAX-Frameworks gibt uns die Möglichkeit Veränderungen an den JavaScript-Objekten zu beobachten / verfolgen.

Im ersten Beispiel wird mittels der Methode “Sys.Observer.addPropertyChanged” an das Objekt Person ein Event-Handler angehängt welcher bei Änderungen an diesem Objekt, diese (standardmäßig) in einem TextArea-Feld mit der ID “TraceConsole“ aus:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<
body
>
    <table
>
        <tr>
            <td>Vorname</td>
            <td><input type="text" id="txtVorname" /></td
>
       
</tr>
        <tr>
            <td>Nachname</td
>
           
<td><input type="text" id="txtNachname" /></td>
        </tr
>
        <tr
>
            <td colspan
="2">
            <button onclick="change()">Change</button
>
            </td
>
        </tr
>
    </table>

    <textarea id="TraceConsole" rows="20" style="width: 50%"></textarea>
    <script src="scripts/MicrosoftAjax.debug.js" type="text/javascript"></script
>
    <script src="scripts/MicrosoftAjaxTemplates.debug.js" type="text/javascript"></script
>
   
<script type="text/javascript">

        // ein Beispiel JSON-Objekt
        var person = {
            Vorname: "Christian",
            Nachname:
"Kiefer"
        };

        // einen Event-Handler auf das JSON-Objekt person setzen
       
// bei jeder Änderung eines Wertes des Objektes wird diese Funktion aufgerufen
       
Sys.Observer.addPropertyChanged(person, function () {
           
// Die Methode Sys.Debug.traceDump gibt den Dump in einem TextArea-Tag
            // mit der ID TraceConsole aus, wenn vorhanden
           
Sys.Debug.traceDump(person);
        });

        function change() {
            Sys.Observer.setValue(person, 'Vorname', $get('txtVorname').value);
            Sys.Observer.setValue(person, 'Nachname', $get('txtNachname').value);
            //  // Alternativ würde auch gehen
            // Sys.Observer.makeObservable(person);
            // person.setValue('Vorname', $get('txtVorname').value);
            // person.setValue('Nachname', $get('txtNachname').value);
        }       

    </script>

</body>
</html>


Im zweiten Beispiel wird nicht ein einzelnes Objekt sondern ein Array beobachtet. Mittels der Methode “makeObservable” werden dem ArrayPersonen weitere Methoden hinzugefügt, wie z.B. “add”.

Nachdem dem Array Personen eine neue Person hinzugefügt wurde, wird der neue Inhalt des Arrays in dem TextArea-Bereich ausgegeben. 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<
body
>
    <table>
        <tr
>
            <td>Vorname</td
>
            <td><input type="text" id="txtVorname" /></td
>
       
</tr>
        <tr>
            <td>Nachname</td
>
           
<td><input type="text" id="txtNachname" /></td>
        </tr
>
        <tr
>
            <td colspan
="2">
            <button onclick="add()">Hinzufügen</button
>
            </td
>
        </tr
>
    </table
>
    <textarea id="TraceConsole" rows="20" style="width: 50%"></textarea
>
    <script src="scripts/MicrosoftAjax.debug.js" type="text/javascript"></script
>
    <script src="scripts/MicrosoftAjaxTemplates.debug.js" type="text/javascript"></script
>
   
<script type="text/javascript">
       
// ein Beispiel mit Array
        var personen = [
            { Vorname: "Christian", Nachname: "Kiefer"}
        ];

        // mit makeObservable werden dem Objekt Personen weitere Methoden hinzugefügt
        Sys.Observer.makeObservable(personen);

       
// einen Event-Handler auf das Array personen setzen
       
// bei jeder Änderung des Arrays wird diese Funktion aufgerufen
        personen.add_collectionChanged( function () {
           
// Die Methode Sys.Debug.traceDump gibt den Dump in einem TextArea-Tag
            // mit der ID TraceConsole aus, wenn vorhanden
           
Sys.Debug.traceDump(personen);
        });

        function add() {
            var person = {
                Vorname: $get('txtVorname').value,
                Nachname: $get('txtNachname').value
            };
           
// Die Methode add stammt von makeObservable
            personen.add(person);
        }       
    </script
>
</body>
</html>

posted @ Friday, July 16, 2010 2:19 PM | Feedback (0)
Tuesday, July 13, 2010
Cache des Flash-Players löschen

Vielen ist nicht bewusst, dass der Flash-Player eigene Cookies mit Informationen über die besuchten Websites (mit Flash-Filmen) speichert. Diese lassen sich nicht über die Funktionen des Browsers löschen.

Wenn man diese Informationen löschen möchte, dann muss man über die Einstellungen des Flash-Players selbst tun und dies geht nur über das Internet.

Hier ist der Link dazu:
http://www.macromedia.com/support/documentation/de/flashplayer/help/settings_manager07.html

posted @ Tuesday, July 13, 2010 7:40 AM | Feedback (0)
Wednesday, June 23, 2010
Constructor via Reflection kopieren

Kann man vielleicht mal wieder brauchen: Constructor via Reflection kopieren

//copy constructor

public ClassName(Testclass testclass)

{

FieldInfo[] lFields = this.GetType().GetFields(BindingFlags.NonPublic

            | BindingFlags.Public | BindingFlags.Instance);

 

foreach (FieldInfo fi in lFields)

            fi.SetValue(this, fi.GetValue(testclass));

}

posted @ Wednesday, June 23, 2010 6:53 AM | Feedback (0)
Wednesday, May 12, 2010
SharePoint: Branding und CSS des Menüs der „Site Actions“

Im Rahmen eines Redesigns einer SharePoint Anwendung musste ich auch das Layout des Site Actions Menüs anpassen.

Wie sollte ich herausfinden welche CSS-Klassen für dieses Menü verantwortlich sind?

Nachdem ich mit der Standardseite zu Sharepoint und CSS (CSS Reference Chart for SharePoint 2007) http://www.heathersolomon.com/content/sp07cssreference.htm nicht weiter kam und mir die Entwicklertools des Internet Explorers auch nicht weiterhalfen, versuchte ich mein Glück mit Firefox und dem Add-on „Firebug“.

Damit konnte ich schnell die Klasse „ms-MenuUIPopupBody“ identifizieren. Ein Blick in die Datei core.css zeigte anschließend, dass die Klassen welche mit „.ms-Menu*“ beginnen für das Menü der „Site Actions“ verwendet werden.

Rahmen:
.ms-MenuUIPopupBody
{
   border:1px solid #e6e6e7;
   margin:0px;
   padding:0px;
}

Überschrift der Beschreibung:
.ms-MenuUIPopupBody TABLE
{
   color:#003399;
   font-size:100%;
   margin:0px;
   padding:0px;
}

Text der Beschreibung:
.ms-menuitemdescription
{
   color:#58585a;
}

Hover-Effekt:
.ms-MenuUIItemTableHover
{
   background-color:#ffe6a0;
   border:1px solid #d2b47a;
}

Die anderen Styles für das Menü der Site Actions beginnen alle mit „.ms-Menu*“ over-Effect und können in der Datei core.css gefunden werden.

posted @ Wednesday, May 12, 2010 6:45 AM | Feedback (0)
Wednesday, April 28, 2010
Tastenkombinationen für Internet Explorer 8

Eine Übersicht über die Tastenkombinationen für Internet Explorer 8 findet man hier:

http://windows.microsoft.com/de-DE/windows-vista/Internet-Explorer-8-keyboard-shortcuts

posted @ Wednesday, April 28, 2010 9:46 AM | Feedback (0)
Friday, April 16, 2010
Überblick über die verschiedenen MasterPages in SharePoint

In SharePoint werden vier verschiedene MasterPages verwendet:

Die originalen MasterPages liegen Im Verzeichnis:

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\GLOBAL

- default.master
- mwsdefault.master

Die Datei default.master wird für alle Standardseiten verwendet.
Die Datei mwsdefault.master wird für alle Meeting Templates verwendet.

Eine weitere wichtige MasterPage liegt im Verzeichnis:

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS

- application.master

Diese ist die MasterPage für alle Seiten welche die Setting-Seiten betreffen.

Die 4. MasterPage liegt im Verzeichnis:

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\ADMIN

- admin.master

Diese MasterPage wird für das Layout der Seiten der Zentral Administration verwendet.

posted @ Friday, April 16, 2010 2:41 PM | Feedback (0)
Wednesday, March 10, 2010
SharePoint Manager

Ein praktisches Tool für SharePoint ist der SharePoint Manager welches bei CodePlex zu finden ist: http://spm.codeplex.com/

Hiermit kann man sich alle Properties aller sites eine lokalen Serverfarm ansehen(und ändern).

posted @ Wednesday, March 10, 2010 2:00 PM | Feedback (0)
Thursday, March 04, 2010
Tools für das Testen eine Mail-Servers

Neulich musste ich mal wieder einen Mailserver einrichten und durchtesten, dabei fand ich  folgende Seiten und Tools hilfreich:

Anleitung für das testen eines Mailservers mit Telnet:
http://www.outlook-net.de/7-16.htm

Seite welche einen Mailserver auf ein offenes Relay testet:
http://www.abuse.net/relay.html

SMTP-Explorer ist ein sehr gutes Programm für das testen eines Mailservers, welches viel Tipparbeit abnimmt:

Bild2

posted @ Thursday, March 04, 2010 10:42 AM | Feedback (0)
Friday, February 26, 2010
Kopierbefehl für “CurrentLibs”

In Projekten empfiehlt es sich oft die erstellen DLLs in ein gemeinsames Verzeichnis zu kopieren, welches auch anderen Anwendungen zu Verfügung steht.

Hier für’s Archiv der Post-build event Command line Kopierbefehl für Visual Studio:

xcopy /y /d "$(TargetPath)" "$(SolutionDir)\..\CurrentLibs\"

posted @ Friday, February 26, 2010 2:04 PM | Feedback (0)
Wednesday, February 10, 2010
Validierung von Telerik RadComboBoxen

Standardmäßig ist es umständlich eine Telerik RadComboBox zu validieren, da diese nicht als klassische ASP.NET Dropdownliste sondern als Input-Feld mit dazu passenden Layern gerendert wird.

Hier ein Beispiel wie man eine Telerik RadComboBox clientseitig per Javascript validieren kann:

Zunächst  die Telerik RadComboBox mit einem klassischen CustomValidator:

<telerik:RadComboBox ID="ddlAnrede"
    runat="server" Skin="Telerik" Width="200px"
    DataTextField="Value"
    DataValueField="Key"
    OnClientBlur="validateCombo"
    SelectedValue='<%# Bind("Anrede") %>'>
    <Items>
        <telerik:RadComboBoxItem TextBitte wählen” Value="" runat="server" />                                               
        <telerik:RadComboBoxItem Text="Herr" Value="Herr" runat="server" />
        <telerik:RadComboBoxItem Text="Frau" Value="Frau" runat="server" />
    </Items>
</telerik:RadComboBox>
<span style='color:Red'>
    <asp:CustomValidator ID="CustomValidator2"
       style='visibility:hidden'
       runat="server"
       ErrorMessage="&nbsp;*"
       validationgroup="insert"
       ClientValidationFunction="validateComboBox" >
    </asp:CustomValidator>
</span>

Diese RadCombobox wird mittels der Javascript-Funktion “validateComboBox” validiert:

<script type="text/javascript">
    function validateComboBox(source, args) {
        args.IsValid = false;
        var combo = $find('<%= getClientID("ddlAnrede") %>');
        var value = combo.get_value();
        var spanErrorAnrede = document.getElementById('<%= getClientID("CustomValidator1") %>');
        if (value.length == 0) {
            spanErrorAnrede.style.visibility = 'visible';
            args.IsValid = false;
        }
        else {
            spanErrorAnrede.style.visibility = 'hidden';
            args.IsValid = true;
        }
    }
</script>
 

 
Hat man mehrere RadComboboxen in einem Formular oder befindet sich diese in einem Listview – und die ID lässt ich nicht mittels der Methode getClientID ermitteln - dann kann man folgende Javascript-Funktion für die Validierung verrwenden:

 <telerik:RadCodeBlock ID="RadCodeBlock789" runat="server">
    <script type="text/javascript">

        function Validate(source, clientside_argument) {
            var sourceElement = document.getElementById(source.id);
            var comboInput = document.getElementByI(sourceElement.controltovalidate + "_Input");
            if (clientside_argument.Value == "--- Bitte wählen ---") {
                comboInput.style.background = "red";
                clientside_argument.IsValid = false;
            }
            else {
                comboInput.style.background = "";
                clientside_argument.IsValid = true;
            }
        }
    </script>
</telerik:RadCodeBlock>
posted @ Wednesday, February 10, 2010 1:56 PM | Feedback (0)
Friday, January 15, 2010
Dynamic Dummy Image Generator

Vor kurzem gefunden, eine Webseite welche einfache Dummy-Grafiken erstellt.

http://dummyimage.com/240x180, z.B. erstellt folgende Grafik:

240x180

posted @ Friday, January 15, 2010 4:01 PM | Feedback (0)
Monday, January 11, 2010
Generische Methode FindControlRecursive

Fürs Archiv eine generische Methode FindControlRecursive:

public static T FindControlRecursive<T>(Control parent, string id) where T : class
{
   foreach (Control child in parent.Controls)
   {
      if ((child.ID != null)
         && string.Equals(child.ID, id, StringComparison.InvariantCultureIgnoreCase)
         && (child is T))
         return (child as T);
 
      var ctl = FindControlRecursive<T>(child, id);
      if (ctl != null)
         return ctl;
   }
   return null;
}
posted @ Monday, January 11, 2010 1:26 PM | Feedback (0)
Wednesday, January 06, 2010
Bilderpfad in web.config / appSettings

Damit ich mir das nicht mehr raussuchen hier eine Anleitung wie man eine Bilderpfad in der web.config speichert und in den ImageUrl-Parameter eines aspx:image-Tags einfügt:

Eintrag in der web.config:

<configuration>
 <appSettings >
    <addkey="ImagePath"value="~/Images/" />
 </appSettings>
</configuration>


Eine allgemeine Methode zu auslesen der appSettings:

public static string GetAppSettings(string keyname)
{
    string keyVal = ConfigurationManager.AppSettings.Get(keyname);
    if (keyVal == null)
       throw new System.Exception("AppSettings key '" + keyname + "' not exist.");
 
   return keyVal;
}


Pfad in das aspx:image-Tag einfügen:

<asp:Image ID="Image2" runat="server" Width="120px" Height="130px"
    ImageUrl='<%# this.GetImagePath(Eval("Bild")) %>' />

 
Die Methode “GetImagePath” in der codebehind-Datei:

protected string GetImagePath(object picture)
{
   return Utils.GetAppSettings("ImagePath",true) + picture;
}
posted @ Wednesday, January 06, 2010 3:22 PM | Feedback (0)
Friday, December 18, 2009
Praktisches Tool: Bildschirmlupe
OneLoupe OneLoupe wird benötigt, um alles, was auf dem Bildschirm angezeigt wird, beliebig zu vergrößern und gegebenenfalls auch festzuhalten, um es nachträglich unter die Lupe zu nehmen.

Dieses Freeware-Tool kann hier heruntergeladen werden:
http://www.softwareok.de/?seite=Microsoft/OneLoupe

posted @ Friday, December 18, 2009 2:58 PM | Feedback (0)
Wednesday, December 16, 2009
Methode für den Vergleich zweier Objekte

Hier eine kleine Methode, mit welcher sich 2 Objekte miteinander vergleichen lassen:

public static bool CompareObjectValues<T>(T obj1, T obj2) where T : class
{
   if (obj1.GetType() != obj2.GetType())
      throw new ArgumentException("ungleiche Klassen können nicht verglichen werden");

   FieldInfo[] lFields = obj1.GetType().GetFields(BindingFlags.NonPublic
      | BindingFlags.Public | BindingFlags.Instance);
 
   foreach (FieldInfo fi in lFields)
   {
      if (Convert.ToString(fi.GetValue(obj1)) != Convert.ToString(fi.GetValue(obj2)))
         return false;
    }
    return true;
 }
posted @ Wednesday, December 16, 2009 2:49 PM | Feedback (1)
Wednesday, December 02, 2009
Installierte Datenbank-Provider

Falls man wissen möchte welche Datenbank-Provider installiert sind, kann man das folgende Konsolenprogramm ausführen:

using System;

using System.Data;

using System.Data.Common;

 

namespace ConsoleApplication1

{

    class Program

    {

        static void Main()

        {

            DataTable dt = DbProviderFactories.GetFactoryClasses();

 

            Console.WriteLine("Installierte Datenbank-Provider:");

            Console.WriteLine();

            foreach (var s in dt.AsEnumerable())

            {

                Console.WriteLine(s[0]);

            }

 

            Console.ReadLine();

        }

    }

}

posted @ Wednesday, December 02, 2009 3:52 PM | Feedback (0)
Monday, November 30, 2009
Fun mit ObjectDataSource

Unlängst erhielt ich in der Entwicklung folgende Fehlermeldung:

“Eine Eigenschaft namens ‘XXX’ für den durch die DataObjectTypeName-Eigenschaft in ObjectDataSource angegebenen Typ "XXX" konnte nicht gefunden werden. “

In unserem Fall lag dies daran, dass die Update-Methode der verwendeten ObjectDataSource eine Liste von Objekten erwartete.
Nachdem wir eine neue Update-Methode erstellt haben die nur ein Objekt erwartet, war die Fehlerursache behoben.

posted @ Monday, November 30, 2009 10:06 AM | Feedback (0)
Thursday, November 26, 2009
Windows Explorer Ersatz: Q-Dir

Q-Dir ist ein kostenloser Ersatz für den Standard Windows Explorer und kann bis zu 4 Fenster mit verschiedenen Laufwerken anzeigen.

qDir 

http://www.softwareok.de/?seite=Freeware/Q-Dir

posted @ Thursday, November 26, 2009 3:01 PM | Feedback (0)
Tuesday, November 17, 2009
“Code analysis tool” von Microsoft: CAT.NET

Microsoft hat unter der folgenden Adresse als CTP-Version ein Tool für die Code-Analyse zur Verfügung gestellt:
http://www.microsoft.com/downloads/details.aspx?FamilyId=0178e2ef-9da8-445e-9348-c93f24cc9f9d&displaylang=en

Dieses Tool überprüft den Quellcode auf mögliche Schwachstellen in Richtung:
- Cross Site Scripting
- SQL Injection
- Process Command Injection
- File Canonicalization
- Exception Information
- LDAP Injection
- XPATH Injection
- Redirection to User Controlled Site

Nach der Installation steht das Tool im Hauptmenü Tools von Visual Studio zur Verfügung.

Hier ein kleines ASP.NET Quellcode-Beispiel:

<%@ Page Language="C#" ValidateRequest="false" %>

 

<script runat="server">  

    protected void Button1_Click(object sender, EventArgs e)

    {

        string eingabe = TextBox1.Text;

        Label1.Text = eingabe;

    }

</script>

 

<html>

<head id="Head1" runat="server">

    <title>Untitled Page</title>

</head>

<body>

    <form id="Form1" runat="server">

    <div>

        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

        <asp:Button ID="Button1" runat="server" Text="speichern"

            onclick="Button1_Click" />

        <br />

        <asp:Label runat="server" id="Label1"></asp:Label>

    </div>

    </form>

</body>

</html>

 

Eine Analyse mit CAT.NET bringt das folgende Ergebnis:

Bild2

Dieses weist uns darauf hin, dass die Zeilen:

        string eingabe = TextBox1.Text;

        Label1.Text = eingabe;

gegen Cross-Site Scripting nicht geschützt ist!

Durch den Einsatz von Anti-XSS Libary lassen sich dann solche Lücken schliessen.

posted @ Tuesday, November 17, 2009 7:47 AM | Feedback (2)
Thursday, October 15, 2009
Kann man immer wieder mal gebrauchen

Ein kleines Konsolenprogramm welches die Verzeichnisse des lokalen Benutzers ausgibt:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; 

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (Environment.SpecialFolder sp in Enum.GetValues(typeof(Environment.SpecialFolder)))
            {
                Console.WriteLine(sp.ToString());
                Console.WriteLine(Environment.GetFolderPath(sp));
                Console.WriteLine();
            }

            Console.ReadLine();
        }
    }
}

Die Ausgabe ist die folgende:

Desktop
C:\Users\admin\Desktop

Programs
C:\Users\admin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs

Personal
C:\Users\admin\Documents

Personal
C:\Users\admin\Documents

Favorites
C:\Users\admin\Favorites

Startup
C:\Users\admin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Recent
C:\Users\admin\AppData\Roaming\Microsoft\Windows\Recent

SendTo
C:\Users\admin\AppData\Roaming\Microsoft\Windows\SendTo

StartMenu
C:\Users\admin\AppData\Roaming\Microsoft\Windows\Start Menu

MyMusic
C:\Users\admin\Music

DesktopDirectory
C:\Users\admin\Desktop

MyComputer

Templates
C:\Users\admin\AppData\Roaming\Microsoft\Windows\Templates

ApplicationData
C:\Users\admin\AppData\Roaming

LocalApplicationData
C:\Users\admin\AppData\Local

InternetCache
C:\Users\admin\AppData\Local\Microsoft\Windows\Temporary Internet Files

Cookies
C:\Users\admin\AppData\Roaming\Microsoft\Windows\Cookies

History
C:\Users\admin\AppData\Local\Microsoft\Windows\History

CommonApplicationData
C:\ProgramData

System
C:\Windows\system32

ProgramFiles
C:\Program Files

MyPictures
C:\Users\admin\Pictures

CommonProgramFiles
C:\Program Files\Common Files

posted @ Thursday, October 15, 2009 6:07 PM | Feedback (0)
Friday, October 02, 2009
Über eine Enumeration iterieren

Falls ich das mal wieder brauche, Beispiel wie man über eine Enumeration iteriert:

class Program
{  
   public
enum
farben
   {
      rot,
      blau,
      gruen
   }
  

   static void Main(string[] args)
   {
   
      foreach (farben farbe in Enum.GetValues(typeof(farben)))
      {
        
Console
.WriteLine(farbe.ToString());
      }
      Console
.ReadLine();
   }
}

posted @ Friday, October 02, 2009 5:55 PM | Feedback (0)
Thursday, October 01, 2009
Tools und Erweiterungen für Visual Studio

findet man hier: http://visualstudiogallery.msdn.microsoft.com/en-us/

posted @ Thursday, October 01, 2009 2:09 PM | Feedback (0)
Wednesday, September 16, 2009
Checkliste für sichere ASP.Net-Webseiten

Bei Microsoft findet man unter der folgenden Adresse eine Checkliste für sicherere ASP-Net-Webanwendungen:
http://msdn.microsoft.com/de-de/library/cc431349(classic).aspx

posted @ Wednesday, September 16, 2009 8:49 AM | Feedback (0)