Laden...

KExtensions v1.4 (Visual Studio Package) inkl. Sourcen

Erstellt von Khalid vor 15 Jahren Letzter Beitrag vor 14 Jahren 47.180 Views
Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren
KExtensions v1.4 (Visual Studio Package) inkl. Sourcen

KExtensions ist ein Visual Studio Package, welches die IDE um ein paar Funktionen erweitert, die ich selber im Laufe der Zeit vermisst habe. Der Kern des ganzen AddIns ist allerdings ein integrierter Windows Explorer innerhalb der IDE. Da ich zwischen den Explorer und der IDE sehr häufig wechsel, habe ich mir überlegt ein Explorer in die IDE einzubetten. Ebenso fehlten mir kleine Funktionen rund ums Refactoring.

Anmerkung zum Update:
Um die neueste Version zu installieren, muss erst vorher die alte deinstalliert werden! Ein "drüberinstallieren" wäre zwar möglich, aber dann werden die Registrierungseinträge nicht entfernt und die IDE würde bei jedem Start meckern, das ihr was fehlt. Also bitte vorher deinstallieren. Danke 🙂


Infos zum Ort des Setups und der Sourcen
Die Sourcen sind auf meinem Blog zu finden (Seite KExtensions): www.brainvalley.org. Es wird VS2008 Std. oder höher benötigt. Ebenfalls ist dort auch das Setup zu finden. Das Setup, welches dort liegt, ist immer identisch zu dem Setup hier im ersten Post. D.h. das hier ebenfalls immer das aktuellste Setup liegt. Nur wenn ihr unbedingt die Sourcen haben wollt, müsst ihr diese von meinem Blog besorgen.

Die Sourcen sind noch nicht komplett dokumentiert!!

Bevor ich es vergesse: Um das Projekt erfolgreich zu kompilieren, muss das VS SDK 2008 1.1 installiert sein.


Versionshistorie:

Version 1.4 (18.12.1009)


- [Changed] Die Namen der Namespaces geändert
- [Fix] Drag & Drop
  - Das Drag & Drop der Komponenten arbeitet jetzt wesentlich stabiler und interagiert
     besser mit der Windows Shell (und sich selber)
  - Unterstützung von Drop Descriptions (Vista und höher)
  - Weiter angepasst an das Verhalten des Windows Explorers
- [Fix] Shell Overlay Icons werden jetzt korrekt dargestellt
- [Fix] Bug behoben, der unter bestimmten Umständen verhindert hat, das einige 
  Kontextmenüeinträge verschwunden sind

Die Sourcen und das MSI werde ich am Wochenende auf meiner Homepage aktualisieren

Version 1.3 (18.05.2009)


- [Fix] Windows Explorer verbraucht weniger Resourcen
- [Fix] Im Windows Explorer unter Vista kann jetzt auch die große (256x256) Miniaturansicht
  ausgewählt werden (per Contextmenu)
- [Feature] INotifyPropertyChanged implementieren
- [Feature] DLL-Dateien vom Windows Explorer als Verweis hinzufügen
- [Feature] Reine Baumansicht des Windows Explorers
- [Changed] Der Dialog zum implementieren von Eigenschaften hat sich im Layout geändert
- [Kicked] myCSharp-Suche (warum, steht weiter unten)

Version 1.2 (11.12.2008 )


- [Fix] Package Load Failure behoben

Version 1.1 (28.11.2008 )


- [Fix] Im CodeExplorer stürzt die IDE nicht mehr ab, wenn in Headerdateien bei 
  C++ Anwendungen navigiert wird. (Dank an ChMaster für den Hinweis)
- [Fix] Beim Stringrefactoring, werden jetzt auch Projekte berücksichtigt, die auf 
  mehreren Ordnern verteilt liegen. (Dank an moq für den Hinweis)
- [Feature] Beim Stringrefactoring kann jetzt auch "Ignorieren" ausgewählt werden.
- [Sonstiges] Der Windows Explorer ist jetzt auf zwei Assemblies aufgeteilt (bessere Wartbarkeit)

Version 1.0 (30.10.2008 )


- Erster Release


Also hier erstmal eine Übersicht der Funktionen
1. String Refactoring
Durchsucht die geladene Solution nach festen Strings im Code. Anschließend kann gewählt werden, was mit dem entsprechenden Strings passieren soll. Entweder als Konstante in der Klasse anlegen, in eine Resourcendatei übertragen oder den String so belassen wie er ist. Ebenfalls können Leerstrings "" gegen String.Empty getauscht werden.

Hier gibt es noch etwas zu machen. Denn momentan wird die komplette Solution durchsucht. Später soll die Suche auf Solution, Projekt, Klasse beschränkt werden können.

2. Properties erstellen
Diese kleine nützliche Funktion ermittelt alle Member einer Klasse und generiert die entsprechenden Properties. Natürlich kann man auswählen ob get/set, nur get oder nur set. Ebenfalls die Sichtbarkeit der Eigenschaft (public/protected/internal/private).
Da ich keine Codegeneratoren oder ähnliches verwende, hat mir diese Funktion schon gut arbeit abgenommen.

3. Code Explorer
Ist ein Toolwindow, welches die momentane Codeklasse als Baum darstellt. Es besteht die Möglichkeit direkt im Baum zu suchen, um schnell eine Methode oder Member oder sonstwas zu suchen um an diese Stelle direkt zu springen. Man kann direkt alle angezeigten Elemente umbennenen. Dies wird sofort im Code und über die ganze Solution übernommen. Sortiert werden kann nach Name (auf- und absteigend) sowie nach Codereihenfolge.

4. myCSharp (nur Version 1.0, 1.1)
Ist ein kleines Gimmick am Rande. Man kann direkt in einem ToolWindow die Suche von myCSharp benutzen. Das Ergbnis wird in einem Grid dargestellt und beim Klick eines entsprechenden Links, wird die Seite im IDE-Eigenem IExplorer angezeigt. In einer späteren Version will ich es konfigurierbar machen. Also entweder IDE Explorer oder der Standartbrowser.
Hierbei gibt es allerdings zwei Einschränkungen. Es werden nur die ersten 30 Treffer angezeigt und man kann nicht blättern. Also 30 Treffer und Schluss. Desweiteren wird immer nur die erste Seite eines Threads ermittelt. Wenn also ein Beitrag mehr als 40 Antworten hat, und somit auf zwei Seiten dargestellt wird, kann man nur die erste Seite öffnen. Möglichweise ändere ich das in einer nächsten Version.

5. Projektliste leeren
Auch ein Gimmick am Rande. Hier lassen sich die Projeke aus der Recent Projects Liste löschen. Um die Änderung sofort sichtbar zu machen, muss die IDE neugestartet werden. Gibt da keinen anderen Weg.

6. Windows Explorer
Das Ding ist ein wenig umfangreicher. Optisch/Funktional ist es fast 1:1 dem Windows Explorer nachempfunden (XP/Vista/2008 ).
Welche Möglichkeiten man hat:

  • Dateien vom Explorer in die Solution ziehen (per Drag&Drop oder Kontextment)
  • Dateien aus der Solution in den Explorer ziehen (z.B. schnell mal eine Kopie von einer Datei erstellen)
  • Dateien direkt als Resource in eine Solution legen (über Kontextmenu)
  • Direkt zum Ordner der Solution springen
  • Direkt zu allen Ordnern springen, die in System.Envirnoment.SpecialFolder liegen (KnownFolder unter Vista/2008 folgt noch)
  • In den Optionen kann einstellt werden, welche Dateierweiterungen direkt in der IDE geöffnet werden sollen.

Da das Ding ziemlich umfangreich ist (auch vom Code), ist es sehr schwer alle Bugs zu finden. Darum bitte bitte alle melden und genau beschreiben. Ich muss es nachvollziehen können.

Falls euch selber noch Dinge einfallen, die man mit reinpacken könnte, dann her damit. Aber gleich vorweg: Das hier soll kein zweites RefactorPro oder sonstwas werden. Kleine Funktionen, die ein das Leben leichter machen halt. Auch sinnvolle Funktionen, wie man den Explorer weiter mit der IDE verschmelzen lässt, sind gerne willkommen 🙂

Achja, um gleich ein paar Fragen von vorne herein zu beantworten:

  • Dieses Package kann nur mit Visual Studio 2008 verwendet werden.
  • Nein, es ist nicht möglich diese Package auf einer Express Edition zu installieren. Standart und höher ist erforderlich!

Der Inhalt der Zip-Datei ist ein MSI Paket.

Unter Vista/W7 schlägt während des Setups das UAC zu, da das Setup die IDE kurz startet.

Wenn das Setup durch ist, und ihr startet die IDE müsste ein neuer Menüpunkt "KExtensions" neben den Menüpunkt "Erstellen" auftauchen.

Achja, noch ein kleiner Tipp: Wenn ihr die Funktion "Strings extrahieren" nutzt, testet es an einem Backup oder sonstiges. Bis jetzt habe nur ich diese Funktion getestet. Bei mir läuft diese zwar gut durch, aber wer weis, was da noch für Bugs drin sind 🙂

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

Der Screenshot im Anhang zeigt die drei ToolWindows "Windows Explorer", "myCSharp" und "Code Explorer"

Die Buttons im Windows Explorer von Links nach Rechts

  • Zum Solutionverzeichnis gehen (inaktiv, wenn keine Solution geladen)
  • Dateiansicht auf Details stellen
  • Dateiansicht auf Listenansicht stellen
  • Dateiansicht auf Kacheln stellen (diese Ansicht ist noch grob verbuggt was die Anzeige angeht)
  • Dateiansicht auf Symbole stellen
  • Zu einem "Systemordner" springen. Einfach den entsprechenden Ordner auswählen und der Tree navigiert zu dem entsprechenden Ordner

Die Buttons im myCSharp von Links nach Rechts

  • Ergebnis löschen
  • "Suchen nach": Einfach den Text eingeben und Enter drücken. Der Suchvorgang kann etwas dauern. Da es aber als Thread läuft wird die IDE nicht blockiert

Die Buttons im Code Explorer von Links nach Rechts

  • Liste sortieren in absteigender Reihenfolge
  • Liste sortieren in aufsteigender Reihenfolge
  • Liste sortieren nach Codedeklaration
  • Im Suchfeld den Member, die Methode oder sonstwas eintragen und Enter drücken. Die Liste filtert jetzt alle Namen raus, die nicht der Eingabe entsprechen. Wildcards braucht man nicht setzen, es wird immer automatisch nach "Name*" gesucht.

Im Menü "KExtensions" verbergen sich 4 Unterpunkte

  • Eigenschaften erstellen. Ist nur aktiv, wenn in einer Codedatei der Cursor innerhalb einer Klasse steht
  • Strings extrahieren. Ist nur aktiv, wenn eine Solution geladen ist
  • Projektliste löschen. Hier kann man die Recent Projects Liste bearbeiten
  • myCSharp: Öffnet das ToolWindow für die Suche bei myCSharp

Die anderen beiden Fenster liegen unter Ansicht->Weitere Fenster->Code Explorer/Windows Explorer

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

Bei diesem Screenshot sieht man, das das Kontextmenu im Explorer etwas erweitert wurde. Die Funktionen die dahinter stehen, kann man ja anhand des Namens sich denken.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

Wählt man z.B. "Als Resource hinzufügen" aus, geht ein Dialog auf, in dem man die Resourcendatei auswählen muss.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

H
364 Beiträge seit 2007
vor 15 Jahren

Kanns mir grad leider ned anschaun, weil ich kein vs08 installiert

aber mien erster eindruck war "WOW", da sind der Beschriebung nach zu urteilen wirklich einige sehr nützliche funktionen drin, vorallem der explorer ist mal was recht praktisches

werds in n paar tagen ausprobieren, und dann mal mein feedback hier posten 🙂

edit: achja, wofür steht "KExtensions"???

C
489 Beiträge seit 2007
vor 15 Jahren

Hallo

Das ist echt genial. Gerade der Explorer ist wirklich hilfreich.

Vielen Dank

chrische

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

achja, wofür steht "KExtensions"???

Oh, hätte nicht gedacht, das da einer nach fragt 🙂
KExtensions ist eigentlich nur eine Abkürzung für "Khalids Extensions for Visual Studio". Es schwebten zwar noch andere Namen in der Luft rum, aber zum Schluss habe ich mich für den entschieden. Ich finde, das klingt ganz nett.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

420 Beiträge seit 2007
vor 15 Jahren

KExtensions

Erinnert mich so an KUpdater^^

Machst du das Ganze auch irgendwann kompatibel zu Visual Studio 2005?

Gruß Dennis

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

Machst du das Ganze auch irgendwann kompatibel zu Visual Studio 2005?

Ich denke mal nein. Das Projekt ist von Beginn an im VS2008 entstanden und ich nutze dementsprechend auch die neuen Methoden aus dem SDK. Ich weis ehrlich gesagt nicht, was passiert wenn ich auf das 8.0 SDK runtergehe. Ich könnt mir vorstellen, das das knallt 🙂
Ich weis auch ehrlich gesagt nicht, ob die IDE vom 2005er das FW3.5 mag.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

B
75 Beiträge seit 2006
vor 15 Jahren

Ich denke mal nein.

Schade hätte mich auch sehr interessiert!!

420 Beiträge seit 2007
vor 15 Jahren

Wirklich schade, da ich beruflich kein VS 2008 nutzen kann...

Wäre es nicht ein Versuch wert?

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

Wäre es nicht ein Versuch wert?

Ein versuch wäre es sicherlich Wert, da ja doch noch viele mit VS2005 arbeiten. Ich lese mich grad durch die MSDN Foren. Und so wie es aussieht frisst die 2005er IDE keine FW3.5 Assemblies. D.h. wiederum ich muss aufs FW 2.0 zurück. Das könnte in Arbeit ausarten.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

T
415 Beiträge seit 2007
vor 15 Jahren

Der erste Eindruck ist echt super! Leider kann ich es - wegen fehlendem VS 2008 - grad nicht genauer anschauen. Aber eine Frage hab ich noch: Wie hast du den Windows Explorer realisiert? Hast du da was benutzt was es bereits OpenSource gibt, oder alles selbst entwickelt? Ich hab mal für ein Projekt sowas ähnliches benötigt und dann (ich glaube) bei http://sourceforge.net/ eine Lösung gefunden, leider war die noch sehr buggy...
Daher hätte ich schonmal großes Interesse an den Sourcen des Explorers ... vielleicht veröffentlichst du das ja mal 😉

Wenn man solche Projekte hier sieht, dann frage ich mich immer wo die Leute soviel Zeit her nehmen, sowas nebenher zu entwickeln. Ich würde das, bei meiner 45 Std Woche und der Zeit die man mit der Familie verbringt, einfach nicht mehr schaffen...

Oder ist das in diesem Fall auch im Rahmen deiner beruflichen Tätigkeit entstanden?

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

Wie hast du den Windows Explorer realisiert?

Komplett alles über die Shell API, da der .NET Krams zu langsam ist, nicht alle Methoden anbietet und nur ein Bruchteil der Infos zurückliefert die man braucht.

Als Vorlage dient dieses Projekt hier. Ich habe das Ding komplett durchgelesen vom Code her und habe dann angefangen alles neu zu implementieren. Im Prinzip kann man sagen, das es zu 100% selber geschrieben ist. Bis auf zwei, drei Klassen, wo es einfach kein Sinn gemacht hätte die neuzuschreiben, da das Resultat 1:1 gewesen wäre (auch von der Namensgebung, da es keine anderen Bezeichner einfach gibt dafür). Ebenfalls hat das genannte Projekt einige macken, die ausgebügelt werden mussten (u.a. Vista kompatibilität).

vielleicht veröffentlichst du das ja mal

Kommt auf jeden Fall. Der Code ist allerdings noch nicht so "einwandfrei" (null Doku, teils Müll aus Testereien). Und ohne Doku im Code wird man schwer zurechtfinden, da gerade der Explorer aus 80% P/Invokes und Marshalling besteht.

Oder ist das in diesem Fall auch im Rahmen deiner beruflichen Tätigkeit entstanden?

Jein.
Da ich plane unsere hauseigene Konfigurationssoftware als Integrated Shell zu realisieren, musste ich mir igendwas suchen, um mit dem SDK vom VS zu spielen.

Sonst alles Privat. Ich habe ebenfalls Familie und auch nicht wirklich so viel Zeit um nebenbei noch was zu proggen. Da mich dieses Projekt aber selber sehr motiviert hat (Lerneffekt), habe ich es durchgezogen.
Und BTW, ich sitze da jetzt seit ca. 5 Monaten dran 🙂

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

5.941 Beiträge seit 2005
vor 15 Jahren

Salute Khalid

Sieht ja sehr cool aus.
Vorallem die myCSharp-Suche ist sicherlich sehr bequem so 🙂

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

T
415 Beiträge seit 2007
vor 15 Jahren

vielleicht veröffentlichst du das ja mal
Kommt auf jeden Fall. Der Code ist allerdings noch nicht so "einwandfrei" (null Doku, teils Müll aus Testereien). Und ohne Doku im Code wird man schwer zurechtfinden, da gerade der Explorer aus 80% P/Invokes und Marshalling besteht.

Das hört man gern, ich warte gespannt 😉

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

So, leider muss ich mitteilen, das ich keine Konvertierung auf VS2005 machen werden. Das hat unter anderem den Grund, das VS2005 bestimmte Schnittstellen nicht anbietet, die ich für ein weiteres geplantes Feature benötige.

Den Source wird es noch dieses Jahr geben (ich leg mich mal nicht auf ein Datum fest 😄).

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

M
130 Beiträge seit 2007
vor 15 Jahren

[...]
1. String Refactoring
Durchsucht die geladene Solution nach festen Strings im Code. Anschließend kann gewählt werden, was mit dem entsprechenden Strings passieren soll. Entweder als Konstant in der Klasse anlegen, in eine Resourcendatei übertragen oder den String so belassen wie er ist. Ebenfalls können Leerstrings "" gegen String.Emoty getauscht werden.

[...]
)

Hallo Khalid,

erstmal vorweg: echt schönes Addin. 🙂

Allerdings habe ich eine Frage zu der String Refactorisierung. Kann es sein, dass verschachelte Projekte innerhalb der Solutions nicht untersucht werden? (Sofern Projekte in eigenen Ordnern abgelegt ist)


Beispiel-Solution Aufbau:
+ Core (Ordner)
  + Networking (Proj)
  + Base (Proj)
  + ExternalCore (Ordner)
     + .. (Proj)
+ Utils (Proj)

In dem obigem Beispiel wird nur Utils untersucht, aber nicht Networking/Base etc.

Achja, schön wäre es auch, wenn man als Aktion neben In Konstante / Resourcedatei / String.empty auch Ignorieren auswählen könnte. 🙂

Viele Grüße,
moq

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

Danke für das Feedback 🙂

In dem obigem Beispiel wird nur Utils untersucht, aber nicht Networking/Base etc.

Mit verschachtelten Projekten habe ich es ehrlich gesagt gar nicht getestet X(. Nur mit einer geraden Struktur, also

+ Solution
  + Projekt1
  + Projekt2

usw...

Das schau ich mir mal an.

Achja, schön wäre es auch, wenn man als Aktion neben In Konstante / Resourcedatei / String.empty auch Ignorieren auswählen könnte.

Die Idee ist gar nicht so schlecht 😉

Kommt auf jeden Fall rein.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

M
130 Beiträge seit 2007
vor 15 Jahren

Danke für das Feedback 🙂

Gerne. 🙂

Mit verschachtelten Projekten habe ich es ehrlich gesagt gar nicht getestet X(. Nur mit einer geraden Struktur, also

Das Projekt andem ich derzeit arbeite, umfasst knapp 1100 Projekte. VS kommt bis ca. 500 Projekte pro Solution gut mit.. Von daher ist bei mir jede Solution (natürlich automatisiert über Abhängigkeiten erstellt) mit Ordner sortiert und gut aufgeräumt..

Viele Grüße und danke für deine Arbeit!
moq

PS:
Zu den Properties erstellen.. Wäre es möglich, dass die Properites anhand der implementierten Interfaces erstellt werden könnten? Gleiches vorgehen wie bisher mit setzen der modifiers etc..

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

Wäre es möglich, dass die Properites anhand der implementierten Interfaces erstellt werden könnten?

Wie meinst du das genau? Die IDE bietet dir diese Möglichkeit ja schon an (Implizit/Explizit implementieren).

Also sowas wie


public interface IDummy
{
  int Property1 { get; set; }
  bool Property2 { get; set; }
}

wird zu (Implizit)


public class Class1: IDummy
{
  private int m_Property1;
  private bool m_Property2;

  public int Property1
  {
    get { return this.m_Property1; }
    set { this.m_Property1 = value; }
  }

  public bool Property2
  {
    get { return this.m_Property2; }
    set { this.m_Property2 = value; }
  }
}

bzw. (Explizit)


public class Class1: IDummy
{
  private int m_Property1;
  private bool m_Property2;

  int IDummy.Property1
  {
    get { return this.m_Property1; }
    set { this.m_Property1 = value; }
  }

  bool IDummy.Property2
  {
    get { return this.m_Property2; }
    set { this.m_Property2 = value; }
  }
}

?

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

M
130 Beiträge seit 2007
vor 15 Jahren

Wenn ich die Schnittstellen implementiere unter VS08 werden keine members erzeugt. In den Gettern/Settern werden NotImplementExceptions erzeugt.

Hast du ein Snippet oder eine Einstellung angepasst, dass bei dir die Member erzeugt werden?

Viele Grüße,
moq!

Beispiel:

 public class Class1 : IDummy
    {
        #region IDummy Member

        public int A
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public int B
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        #endregion
    }

    public interface IDummy
    {
        int A { get; set; }
        int B { get; set; }

    }

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

Oh, meine Codebeispiele haben auf das gezeigt, wie es mal aussehen könnte (hätte ich besser drauf hindeuten sollen). Mit den Codebeispielen wollte ich dich fragen, ob du das so in der Art meintest. Aber ich denke mal ja 🙂

Also, das NotImplementedException wird natürlich auch bei mir gesetzt. Dieses Verfahren kann man auch nicht beeinflussen, da es halt direkt von der IDE (bzw. den c# Tools) umgesetzt wird.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

P
660 Beiträge seit 2008
vor 15 Jahren

wurde diese erweiterung für c# optimiert?

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

Ja. Zurzeit unterstützt die Erweiterung nur c#.

VB.NET wird deswegen nicht unterstützt, da ich selber noch selten bis nie was in VB.NET gemacht habe. Da es sich allerdings nur um Codegenerierung handelt, werde ich VB.NET später nachschieben.

Sorry

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

946 Beiträge seit 2008
vor 15 Jahren
Problem mit Installer

Ich wollte mir eben das Projekt installieren, doch dann erschien folgende Messagebox:

Error 1001. Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt

Der Fortschrittbalken befindet sich dabei im zweiten Durchlauf.
Ich benutze Vista (wie man am Fenster sieht).

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

Oh.

Sowas hatte ich noch gar nicht. Habe es eben mal auf meinem Vista VPC installiert. Da lief es glatt durch. Der folgende Code wird ausgeführt beim Setup:


public override void Install(IDictionary stateSaver)
    {
      base.Install(stateSaver);

      using (RegistryKey setupKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS"))
      {
        if (setupKey != null)
        {
          string devenv = setupKey.GetValue("EnvironmentPath").ToString();
          if (!string.IsNullOrEmpty(devenv))
          {
            Process.Start(devenv, "/setup /nosetupvstemplates").WaitForExit();
          }
        }
      }
    }

Könnte höchstens ein Rechteproblem sein. Mit was für einem Konto bist du angemeldet?

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

946 Beiträge seit 2008
vor 15 Jahren

Das Problem liegt da:

using (RegistryKey setupKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS"))

Der Pfad existiert bei mir nicht. Funktioniert vermutlich nicht mit Express Edition.

Edit:

Achja, um gleich ein paar Fragen von vorne herein zu beantworten:

  • Dieses Package kann nur mit Visual Studio 2008 verwendet werden.
  • Nein, es ist nicht möglich diese Package auf einer Express Edition zu installieren. Standart und höher ist erforderlich!

Hätte deinen Post genauer durchlesen sollen...

C
489 Beiträge seit 2007
vor 15 Jahren

Hallo

Genau. Die Expressversion unterstützt keine Addinns.

chrische

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

Hallo,

die Sourcen sind jetzt verfügbar. Näheres dazu im ersten Beitrag.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren

Neue Version 1.2

Diese Version behebt den Bug, der im Thread Fehlermeldungen bei KExtensions v1.1 (Visual Studio Package) angesprochen wurde.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

So, nach langer Zeit mal wieder was neues 😃

Kurzer Überblick:

Was ist neu?

  • Der integrierte Windows Explorer verbraucht jetzt wesentlich weniger Ressourcen.
  • Es funktionieren jetzt die gängigen Shortcuts im Windows Explorer.
  • Neben den Windows Explorer gibt es jetzt auch einen "Tree Windows Explorer".
    Dieser zeigt nur den Baum an, plus den Dateien innerhalb des Baumes.

Was ist weg?

  • Die myCSharp Suche 😦
    Ja, die ist erstmal weg. Warum? Tja, das Ding hatte echt noch ein paar blöde Bugs,
    die auch die IDE teilweise lahm gelegt haben (war sehr selten bis gar nicht, aber
    wenn das heftig)
    Ein weiterer Grund: Ich will das Projekt wahrscheinlich auf CodePlex publizieren. Da
    die myCSharp Suche eine sehr spezielle Sache ist, ist dies ein weiterer Grund, das
    diese Funktion (erstmal) rausgefallen ist.
    Höchstwahrscheinlich bringe ich die Suche dann als eigenständiges Package raus.

Wie geht es weiter?

  • Der Windows Explorer soll noch tiefer greifen bzw. mehr Funktionen bieten. Ich stell
    mir da schon noch einiges vor. Vorallem ein wesentlich "intelligenteres" Drag & Drop.
  • Eine Art "Business-Object Creator". Dieser soll dazu dienen auf die schnelle Objekte
    zu erzeugen, welche von vorneherein INotifyPropertyChanged, IDataErrorInfo und
    IEditableObject anbieten.

So, auf den nächsten Seiten zeige ich nochmal Screenshots von ein paar neuen Funktionen.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Der neue Windows Explorer als ToolWindow eingebettet.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Neue Funktion "INotifyPropertyChanged implementieren"

Diese Funktion fügt das INotifyPropertyChanged Interface einer bestehenden Klasse hinzu.
Beispiel:


public class Dummy
{
  private string m_TestString;
  private int m_TestInt;

  public string TestString
  {
    get { return this.m_TestString; }
    set { this.m_TestString = value; }
  }

  public int TestInt
  {
    get { return this.m_TestInt; }
    set { this.m_TestInt = value; }
  }
}

Nach Aufruf der Funktion:


public class Dummy : System.ComponentModel.INotifyPropertyChanged
{
  private string m_TestString;
  private int m_TestInt;

  public string TestString
  {
    get { return this.m_TestString; }
    set
    {
      this.m_TestString = value;
      OnPropertyChanged("TestString");
    }
  }

  public int TestInt
  {
    get { return this.m_TestInt; }
    set
    {
      this.m_TestInt = value;
      OnPropertyChanged("TestInt");
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;

  protected virtual void OnPropertyChanged(string propertyName)
  {
    System.ComponentModel.PropertyChangedEventHandler handler = PropertyChanged;
    if ((handler != null))
    {
      handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
    }
  }
}

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Das ganze funktioniert auch mit anonymen Eigenschaften, also die


public int Bla { get; set; }

Im Dialog, in dem man auswählt, welche Eigenschaften angepasst werden soll, werden die
anonymen Eigenschaften fett markiert. Wenn dies der Fall ist, kann man auswählen, ob diese
Eigenschaften gegen "richtige" Eigenschaften ausgetaucht werden soll. Desweiteren kann ein
Prefix ausgewählt werden.

Das ganze sieht dann so aus (Prefix mit m_)
Vorher:


public class Dummy
{
  private string m_TestString;

  public string TestString
  {
    get { return this.m_TestString; }
    set { this.m_TestString = value; }
  }

  public int TestInt { get; set; }
}

Nachher


public class Dummy : System.ComponentModel.INotifyPropertyChanged
{
  private int m_TestInt;
  private string m_TestString;

  public string TestString
  {
    get { return this.m_TestString; }
    set
    {
      this.m_TestString = value;
      OnPropertyChanged("TestString");
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;

  protected virtual void OnPropertyChanged(string propertyName)
  {
    System.ComponentModel.PropertyChangedEventHandler handler = PropertyChanged;
    if ((handler != null))
    {
      handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
    }
  }

  public int TestInt
  {
    get
    {
      return this.m_TestInt;
    }
    set
    {
      this.m_TestInt = value;
      OnPropertyChanged("TestInt");
    }
  }
}

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Kleine aber nette Neuerung im Windows Explorer. Wird eine DLL Datei per Rechtsklick geöffnet,
kann diese als Verweis zu einem Projekt hinzugefügt werden. In dem Dialog lassen sich ein oder
mehrere Projekte auswählen, zu dem dann die DLL hinzugefügt werden soll. Ganz praktisch, wenn
man z.B. log4net nachimplementieren will. Man muss dann nicht händisch bei jedem Projekt Verweis
hinzufügen auswählen.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Per Rechtsklick auf beliebige Dateien oder Ordnern, können die Datei-/Verzeichnisnamen in die
Zwischenablage kopiert werden. Hierbei gibt es mehrere Möglichkeiten

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

So, zum Schluss:

Wie manche vielleicht anhand der neuen Screenshots erkannt haben: Ja, es ist 100% kompatibel zum
Windows 7 RC.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

T
415 Beiträge seit 2007
vor 14 Jahren

Ich war von deiner alten Win Explorer Komponente schon extrem begeistert und hatte die schon verwendet. Ich werde nun bei Gelegenheit deine neue Version mal unter die Lupe nehmen. Bisher klasse Arbeit!

H
364 Beiträge seit 2007
vor 14 Jahren

So, zum Schluss:

Wie manche vielleicht anhand der neuen Screenshots erkannt haben: Ja, es ist 100% kompatibel zum
Windows 7 RC.

Auch zu der Beta von VS2010?

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Nein. Zum VS 2010 ist es nicht kompatibel.

Das ist einer meiner nächsten Schritte. Nur lässt sich das SDK vom 2010 bei mir nicht installieren, so wie einigen anderen auch nicht. MS hat nur leider noch keine Lösung parat 😦

Bisher klasse Arbeit!

Danke 😃

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

T
415 Beiträge seit 2007
vor 14 Jahren

Hallo Khalid,

wie ich ja schon schrieb nutze ich deine alte Version des Win Explorers. Mir ist aufgefallen, dass wenn ich die Detail Ansicht des ShellListViews anwähle, die Dateien mit einer falschen "geändert am" Zeit angezeigt werden. Die Zeit wird immer 2 Stunden früher angezeigt, also 8:00 Uhr statt 10:00 Uhr.
Ich muss zugeben ich habe nach dem Bug noch nicht gesucht, in der Hoffnung, dass dir dazu sofort was einfällt. Ist das nicht der Fall, suche ich natürlich selber nach dem Fehler ;o)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Hallo t2t,

komisch, das mir das noch gar nicht aufgefallen ist 😃. Das liegt an der UTC Zeit. Alle Zeitstempel unter Windows werden als UTC abgespeichert. Das erklärt die Differenz von 2h.

Um das zu korrigieren, musst du in der ShellItem.cs die Methode "FileTimeToDateTime" wie folgt ersetzen:


private DateTime FileTimeToDateTime(FILETIME fileTime)
{
  long hFT2 = (((long)fileTime.dwHighDateTime) << 32) | fileTime.dwLowDateTime;
  DateTime fileDateTime = DateTime.FromFileTimeUtc(hFT2);
  return TimeZone.CurrentTimeZone.ToLocalTime(fileDateTime);
}

Dachte eigentlich, das DateTime.FromFileTimeUtc das automatisch erledigt 😃

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

T
415 Beiträge seit 2007
vor 14 Jahren

Sehr gut. Damit klappt es bestens. Gut möglich, dass ich in Zukunft nochmal ähnliche Fragen stellen werde. Dank dir soweit.

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Die aktuellsten Sourcen sind jetzt auf meiner Homepage zu finden.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

T
415 Beiträge seit 2007
vor 14 Jahren

Hallo Khalid,

ich hab mal wieder Fragen zum Win Explorer. Ich würde gerne ein paar neue Features implementieren die da wären (im ShellListView):

  • kopieren + einfügen (per Kontextmenü und den Shortcuts Strg + C / Strg + V)
  • auschneiden + einfügen (per Kontextmenü und den Shortcuts Strg + X / Strg + V)
  • Die Funktion eine Datei innerhalb eines Ordners per Drag & Drop bei gedrückter Strg-Taste zu kopieren
  • Drag & Drop Funktion vom echten Win Explorer hin zum ShellListView

Kannst du mir zu den Punkten ein paar Tipps geben, wie die sich einfach realisieren ließen? Soweit ich das erkennen konnte, ist die Behandlung der ersten beiden Punkte zwar im Quellcode in den Enums berücksichtigt worden, wurde von dir aber nicht implementiert. Hatte das einen Grund?

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Hallo t2t,

also

kopieren + einfügen (per Kontextmenü und den Shortcuts Strg + C / Strg + V)

Shortcuts STRG+xxx sollten alle funktionieren. Über das Kontextmenü hab ich das irgendwie verpennt. Liegt wahrscheinlich daran, das ich das nie über das Kontextmenü mache 😃

Die Funktion eine Datei innerhalb eines Ordners per Drag & Drop bei gedrückter Strg-Taste zu kopieren

Auf die Idee bin ich noch gar nicht gekommen. Aber stimmt, das funktioniert z.Z. nicht.
Wenn du das selber implementieren möchtest, müsstest du dir mal die expliziten Methoden des Interfaces IDropTarget anschauen, sowie die normalen OnXXX der Drag & Drop Operationen. Irgendwo wird stehen, das bei Strg und gleicher Ordner nichts passieren soll. Muss ich auch nochmal schauen.

Drag & Drop Funktion vom echten Win Explorer hin zum ShellListView

Stellt bei W7 / Vista kein Problem dar. Da ich ja die Shell Drag & Drop Interfaces nutze (also IDropTarget, IDropSource) wird innerhalb der Shell automatisch erkannt, das diese Anwendung mit der Shell interagieren kann.
Mit XP konnte ich es noch nicht prüfen.

So, ich sitze ja gerade an einer neueren Version, die noch einiges an den Explorer-Komponenten dreht. Hauptsächlich wieder Speicherverwaltung. Deine genannten Punkte prüfe ich auf jeden Fall nochmal durch und werde diese mit aufnehmen. Dadurch, das ich halt privat ein kleinen Dämpfer bekommen habe, verschiebt sich das ganze noch etwas. Wird aber so fix wie möglich fertig sein. Vielleicht schaffe ich sogar ende der nächsten Woche.

Gruß
Khalid

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

T
154 Beiträge seit 2009
vor 14 Jahren

WoW, das ding ist echt Top!
Vor allem der Explorer ist ein Segen. Ich hasse es, immer Dokumente, VS08, Projekte. ... zu suchen, bis ich zwischen meinen 50 Projekten das eine finde.

Aber was ich noch schön fände, wenn man per Rücktaste einen Ordner raufspringt.
Und dass beim "Zur Solution hinzufügen" Ordner erstellt werden können 😉

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Danke

Aber was ich noch schön fände, wenn man per Rücktaste einen Ordner raufspringt.

Lässt sich einrichten.

Ist jetzt natürlich die Frage, ob es so wie beim Windows Explorer funktionieren soll, sprich das er Rückwärts durch die History geht, oder ob er wirklich immer stumpf ein Ordner höher wandern soll. Ich persönlich würde auch das stumpfe ein Höher schöner finden.

Und dass beim "Zur Solution hinzufügen" Ordner erstellt werden können 😉

Interessante Idee. Sollte eigentlich kein Problem sein.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

T
154 Beiträge seit 2009
vor 14 Jahren

Jop, stumpf ist besser. History brauchst du bei dem eigentlich eh nicht 😕

Außerdem: Ich fände es gut, wenn man noch Buttons hat, für einen Ordner hoch, Neuen Ordner erstellen usw. im explorer 😉
Vll Kontextmenu, mit Datei erstellen usw. 😉

EDIT:und noch vll 2 Buttons die jeweils die ganze TreeView expanden/schließen, weil irgendwann alles offen ist, und das sehr unübersichtlich wird, und dauert zum schließen ^^

MfG
TBR