Dieser Artikel wurde maschinell übersetzt.

Programmieren Mit F#

Erstellen Einer F#-/ C#-VSIX-Projektvorlage

Dan Mohl

Herunterladen des Codebeispiels

Software-Entwickler Werden Voraussichtlich Zunehmend Komplexe Lösungen in Kürzerer Zeit Und Mit Weniger Fehlern Zu Bieten. Ein Bereich, der wird oft Produktivitätsverlust ist Die Anfängliche Einrichtung Neuer F#, C# Oder Visual Basic Projekte in so, Wie Sie Benötigen. Die Beste Möglichkeit, Diese Sich Wiederholenden verknüpfen Sie Setup Reduzieren, ist Die Erstellung einer kopierendes Visual Studio Extension (VSIX).

Sie Können Auch Zum Erstellen Einer Projektvorlage VSIX, Förderung der Entwicklung von Standards Für Software, Präsentieren Ein Neues Produkt Oder Ein Schnellstart in Eine Neue Technologie Bieten. War Auch Immer Ihr Grund, die Möglichkeit, Diese Projektvorlagen VSIX, um Ihre Entwicklung Sehr Nützliches Erstellen Hinzufügen Bestimmter Vorteile Haben.

In Diesem Artikel zurück Ich Ihnen Wie Autoren Eine VSIX-Projektvorlage, machte aus Einem C# ASP.NET MVC-3-Webanwendung, Eine F#-Bibliothek, Die Den Serverseitigen Code Enthält Und Ein F#-Bibliothek, die Verwendet Werden Kann, um Komponententests Enthalten. Darüber Hinaus Lernen Sie Some Erweiterte Techniken,, die Verwendet, Flexibilität Und Leistungsfähigkeit Ihrer Projektvorlagen Hinzu. Am Ende Werden Die Kenntnisse, Die Zuvor Erwähnten Zeitfresser Durch Die Erstellung Eigener Benutzerdefinierter Projektvorlagen Erheblich Zu Reduzieren Gewappnet Sein.

Einrichtung

Vor Dem Einstieg, Müssen Sie Einige Aufgaben Ausführen, um Ihre Entwicklungsumgebung Einrichten Zu Erhalten. Prüfen Sie Zunächst Sicher, Dass you Visual Studio 2010 Professional Oder Höher Mit Den F# Und C# Komponenten Installiert. You Then you Visual Studio 2010 SDK, Das Sie, von der ersten CAN bit.ly/Vs-2010-SDK. Visual Studio-2010-SDK-provides-Alles, was necessary, Erstellen Sie Ein Projekt VSIX. Erstellen Einer Vorlage Mit Mehreren Projekten Zugeordnete Langeweile Zu Reduzieren, Auch Herunter, Und Installieren des Assistenten Vorlage Exportieren, aus the bit.ly/Export-Vorlage-Wiz. Schliesslich should you Zu Das Mit Diesem Artikel Bereitgestellte Beispiel Abgeschlossen Haben, Download and Install the ASP.NET MVC-Tools Update 3, Abrufbar Unter bit.ly/mvc3-Tools-Update. Dieses Update Bietet Eine Reihe von Nützlichen Funktionen Und Tools, including NuGet 1.2. Für Weitere Informationen Lesen Sie in bit.ly Einführung-mvc3-Tools-Update.

Erstellen der Ersten Anwendung

Ihre Umgebung Eingerichtet ist, Können Sie Die Basisanwendung Erstellen, die Erstellt Wird, Jedes Mal, Wenn Die Projektvorlage aus Innerhalb der Visual Studio der Projekt-Assistent Gestartet Wird. Stirbt Können Sie Festlegen, Die Genau war you can Simply, um Zeitverschwendung Durch Sich Wiederholende Projekt Initialisierungsaufgaben Zu Verringern. Die Entwickelte Lösung Kann Zu Diesem Zeitpunkt so Einfach Oder Komplex Wie Erforderlich Sein.

Das Erste Projekt, Das Sie Erstellen Müssen, ist Ein C# ASP.NET MVC 3 Web-Anwendung, die MsdnWeb Genannt Werden Soll. Die Rolle Dieses Projekts ist Die Darstellungsschicht der Gesamtlösung Vorzusehen. Sie Startet Den Projekt-Assistenten in Visual Studio, Und Wählen Sie ASP.NET MVC-3-Webanwendung, Die in Visual C# Gefunden Werden Können | Web. In Diesem Beispiel should Verify die Vorlage "Leere" RAZOR-Ansicht-Engine Und "Use HTML5 semantic Markup" Optionen Ausgewählt Sind, and then click OK. Nachdem Visual Studio Abgeschlossen ist, Das Projekt Zu Generieren, suchen Sie Die Dateien Global.asax Und Global.asax.cs. Sie setze Die Mehrheit des Codes Für Die "Global.asax" in F#, so Jetzt daraus Entfernen Sie die Datei Global.asax.cs Und Aktualisieren Das Markup Global.asax Wie in Dargestellt Abbildung 1. Als Letzten Schritt Für Dieses Projekt CAN you Erstellen Einen Neuen Ordner Im Ordner Ansichten Namens Home Und Darin Mit Dem Namen Index Eine Neue Ansicht Hinzufügen.

Updating the Global.asax Markup
Abbildung 1 Das Markup Global.asax aktualisieren

Als Nächstes Erstellen Sie Ein Neues F#-Steuerelementbibliothek-Projekt Mit Dem Namen MsdnWebApp, Und Entfernen Sie Die Standarddateien Datei Und .fsx, die Visual Studio Erstellt. Der Hauptzweck Dieses Projekts ist die Controller-Modelle Und Anderen Serverseitigen Code, Die Die Ansichten Fahren Enthalten. Da es Sich um Ein F# Projekt Handelt, Werden Diese Serverseitigen Code Im Sauberen, Scharfe Und Prägnanten Stil Erstellen, die F# verfügt. Um Dieses Projekt Für den Beabsichtigten Zweck Zu Verwenden, Müssen Sie Verweise Auf Die System.Web, System.ComponentModel.DataAnnotations, System.Web.Abstractions Und System.Web.Mvc (Version 3.0 Oder Höher) Hinzufügen Produktepräsentationen. Sie Müssen Auch Eine Global.fs-Datei Hinzufügen, die in Dargestellten Codes Enthält Abbildung 2.

Abbildung 2 Die Datei Global.fs

namespace MsdnWeb
 
open System
open System.Web
open System.Web.Mvc
open System.Web.Routing
 
type Route = { controller : string
               action : string
               id : UrlParameter }
 
type Global() =
  inherit System.Web.HttpApplication()
 
  static member RegisterRoutes(routes:RouteCollection) =
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
    routes.MapRoute("Default",
                    "{controller}/{action}/{id}",
                    { controller = "Home"; action = "Index"
                      id = UrlParameter.Optional } )
 
  member this.Start() =
    AreaRegistration.RegisterAllAreas()
    Global.RegisterRoutes(RoutTable.Routes)

Sie Müssen ausserdem Eine HomeController.fs-Datei Hinzuzufügen, die Hier Fuentes Code Enthält:

namespace MsdnWeb.Controllers
 
Open System.Web
Open System.Web.Mvc
 
[<HandleError>]
type HomeController() =
  inherit Conroller()
  member this.Index() =
    this.View() :> ActionResult

Als Letzte Aufgabe in Die Erfassungshistorie Anwendung Erstellen should you Das Zweite F# Library-Projekt Erstellen Und es MsdnWebAppTests Nennen. Wie der Name Schon Sagt, ist der Zweck des MsdnWebAppTests-Projekts, Die Die Komponententests Für MsdnWebApp Enthält. Mit Komponententests Würde Eine Serienreifen Version des Projekts Vorbereitet Werden. Hingegen um die Dinge Einfach Zu Halten, Können Entfernen Sie Die Import and Export Standard Datei Und .fsx Dateien, Visual Studio Generiert Und Das Leere Projekt als Container Für Die Erstellung von Zukünftigen Tests Verlassen. Um Ein Beispiel Für den Code Anzuzeigen, die Diesem Projekt Hinzugefügt Werden Konnte, Installieren Sie Im Paket FsUnit.MvcSample NuGet bit.ly/Fsunit-mvc3-Tests.

Erstellen der VSIX-Projektvorlage

Die Beispiel-Projektvorlage, Die Ich you the Bin Hat Mehrere Ziele. Diese Ziele Sind Die Grundlage, Auf der Sie der Rest Dieses Artikels Basiert:

  1. Bieten Sie Eine VSIX-Projektvorlage, machte aus Einem Projekt C# Und Zwei F# Projekte.
  2. Dynamisch Fügen Sie Jedes der Projekte Zu Einer Freigegebenen Anwendungen Beim Erstellen Neuer Projekte Hinzu.
  3. Fügen Sie Alle Notwendigen Projektverweise werden Jedes Mal hinzugefügt, Wenn die kopierendes Gestartet Wird.
  4. Installieren Sie Pakete Für Verschiedene NuGet Auf Die Erstellte ASP.NET MVC 3 Web-Anwendung.
  5. Stellen Sie Eine Benutzeroberfläche, die Einem Benutzer Ermöglicht, Verschiedene Projekterstellung Optionen Angeben.

Visual Studio Bietet Ein Umfassendes Erweiterungsmodell, Das Macht Das Erste Ziel Relativ Einfach Zu Realisieren. Ist Die Einfachste Möglichkeit, Stirbt Nutzen Vorlage Export-Assistenten Starten, Indem Sie Auf Datei | Exportieren Sie die Vorlage als VSIX. Visual Studio Zeigt Dann Die VSIX-Paket-Erstellungs-Assistent, der Die Auswahl Mehrerer Projekte in Einem Paket Vsix Komprimiert Werden Soll. Während Dieser easily Multiprojekt Szenarien Behandelt, Kann es Nicht Anspruchsvolleren Anforderungen Wie Ziele Zwei Bis Fünf Behandeln. Um Diese Dinge Zu Tun, Müssen Sie Ein Bisschen Mehr Leistung.

Diese Kraft Kommt in Form der Komposition Über Die IWizard-Schnittstelle. Stirbt ist i. d. R. als Erstellen Ein Vorlagen-Assistenten Verwiesen. Um eine Einfache Vorlage-Assistenten in F# Zu Erstellen, Müssen Sie Ein Neues F#-Bibliothek-Projekt Erstellen, Fügen Sie Eine Klasse, Die Die IWizard-Schnittstelle Implementiert (Siehe Abbildung 3) Und Fügen Sie Verweise Auf EnvDTE Und Microsoft.VisualStudio.TemplateWizardInterface.

Abbildung 3 Die IWizard-Schnittstelle implementieren

namespace MsdnFsTemplateWizard
 
open System
open System.Collections.Generic
open EnvDTE
open Microsoft.VisualStudio.TemplateWizard
 
type TemplateWizard() =
  interface IWizard with
    member this.RunStarted (automationObject:Object,)
           replacementsDictionary:Dictionary<string,string>,
           runKind:WizardRunKind, customParams:Object[]) =
           "Not Implemented" |> ignore
    member this.ProjectFinishedGenerating project = "Not Implemented" |> ignore
    member this.ProjectItemFinishedGenerating projectItem =
      "Not Implemented" |> ignore
    member this.ShouldAddProjectItem filePath = true
    member this.BeforeOpeningFile projectItem = "Not Implemented" |> ignore
    member this.RunFinished() = "Not Implemented" |> ignore

Erweiterte Funktionen Wie Z. B. Das Programmgesteuerte Hinzufügen von Projektverweisen Und Installieren von Paketen NuGet Behandeln, Müssen Sie Auch Verweise Auf EnvDTE80, VSLangProj, VSLangProj80, Microsoft.VisualStudio.ComponentModelHost, Microsoft.VisualStudio.OLE.Interop, Microsoft.VisualStudio.Shell, Microsoft.VisualStudio.Shell.Interop, Microsoft.VisualStudio.Shell.Interop.8.0, NuGet.Core (Version 1.2 Oder Höher) Und NuGet.VisualStudio (Version 1.2 Oder Höher) Hinzufügen. Wenn Sie die Anweisungen Zum Einrichten Ihrer Umgebung Befolgt Haben, Sind Alle Diese Bibliotheken Auf Dem Lokalen Computer Verfügbar. Nur Einige der Wichtigsten-Bibliotheken Auch Finden Sie in Den Lib-Ordner des Quellcodes, die Den Artikel Begleitet, Finden Sie Unter fsharpmvc3vsix.codeplex.com.

Als Letzten Schritt Zu Den Grundlegenden Vorlagen-Assistenten Erstellen Müssen Sie Zum Signieren der Assembly des Vorlagen-Assistenten. Wenn Sie Noch Keines Haben, Sie Müssen Zunächst Eine Starke Generieren Mit Dem Namen Schlüsseldatei (Snk) (See bit.ly/how-to-Erstellen-Snk Informationen, Wie Sie Stirbt Tun). Sobald Sie Eine SNK-Datei Haben, Können Sie Die F# Vorlage Assistentenassembly Signieren, Auf Die Eigenschaften des Projekts, Wählen Die Registerkarte Erstellen Und Geben Folgendes in Die der "Andere Flags:" TextBox (Sie Müssen Ersetzen <Path> Und < SNK-Datei-Name > Mit Den Werten, die Sich Auf Ihre Spezifischen SNK-Datei):

'--keyfile:"<Path><snk File Name>.snk"'

Um Diese Vorlagenassistenten Verwenden, Müssen Sie Eine Vorlage Mit Mehreren Projekten Erstellen, die Die Signierten Vorlage Assistentenassembly Verweist. Die Einfachste Möglichkeit Hierzu ist Die Verwendung Die Export-Vorlage-Assistenten Visual Studio 2010-Erweiterung Für Kick-Start der Prozess Manuell anpassen, Dann Das Ergebnis. In Den Assistenten, Die anzeigen, Wenn Sie die Datei Starten | Exportieren Sie der Vorlage als VSIX, Wählen Sie Die MsdnWeb, MsdnWebApp Und MsdnWebAppTests-Projekte, and then click Next. Geben Sie Auf der Resultierenden Seite Auf Den Vorlagennamen Und Die Beschreibung, die Sie Verwenden Möchten, Werden Im Fenster Visual Studio Neuen Projekt-Assistenten, Und Geben Den Pfad des Vorlagen-Assistenten-DLL Für Die Assembly-Assistenten. Klicken Sie Auf Weiter, Sie Deaktivieren Sie Die Option "Vorlage Automatisch in Visual Studio Importieren" Und Klicken Sie Auf Fertig Stellen. Visual Studio Wird Dann Das VSIX-Paket Erstellen, Starten Sie Windows Explorer Und Gelangen Sie Zu Dem Verzeichnis, Das die Datei VSIX Enthält.

Dies Gibt Ihnen Einen Ausgangspunkt Für Schönen, Aber Sie Müssen Jetzt Erhalten Sie Ihre Hände Schmutzig and Some Manuelle Änderungen Vornehmen. Da VSIX Dateien Eigentlich Nur ZIP-Dateien Mit Einer Anderen Erweiterung Handelt, Können Sie Durch Einfaches Ändern der Dateierweiterung in .zip Und Extrahieren Alle Dateien in Die Eingeweide in diesem Paketpost Graben. Nach Abschluss, Navigieren Sie Zum Verzeichnis "Lösung" den Sie in Den Ordner der Extraktionsvorgang Offenbart, Und Extrahieren Sie Die Komprimierte Datei Innerhalb. Diese Extraktion Zeigt Die Projekte, die Ihre kopierendes Sowie Eine VSTEMPLATE-Datei Bilden.

Um die Ziele Für Dieses kopierendes Müssen Sie Diese VSTEMPLATE-Datei Ändern. Der Erste Schritt, war tra should you ist Die Datei in MsdnFsMvc3.vstemplate Umbenennen. Da Diese VSTEMPLATE-Datei Eine Einfache XML-Datei ist, Kann Jetzt Öffnen Sie Die Datei in Ihrem Texteditor Wahl Und Tun Sie Folgendes:

  1. Überprüfen Sie, Ob Die <Name> Und <Description> Elemente Enthalten Informationen, die Sie Für Dieses kopierendes in Den Visual Studio Projekt-Assistent Angezeigt Haben Möchten.
  2. Ändern Sie Den Wert in der <ProjectType> Element FSharp.
  3. Entfernen Sie Alle Untergeordneten Elemente des <ProjectCollection> Element.

You can Jetzt Speichern Und Schließen Sie die Datei Und Komprimieren Dann Die Drei Ordner als Auch Die festzustellen VSTEMPLATE-Datei in Eine Datei Namens MsdnFsMvc3.zip.

Die Datei MsdnFsMvc3.zip Konnte Problemlos Suchkriterien Werden Wieder in Ein VSIX-Paket an Diesem Punkt, Aber Sie Würden Dann Links Ohne die Möglichkeit Zum Testen Oder blenden Das Paket Mit debugging-Support. Es Wäre Viel Besser, Wenn Visual Studio Für Diese Arten von Vorgängen Verwendet Werden Kann. Glücklicherweise provides Visual Studio-2010-SDK, Das Sie Zuvor Installed Genau Die Art von Werkzeugen, die Für Diesen Zweck Erforderliche. Um Zu Beginnen, Müssen Sie Zunächst Ein Neues VSIX-Projekt Erstellen,, die Im Neuen Projekt-Assistenten Unter Visual C# gefundenen | Erweiterbarkeit. Das Projekt, Das Visual Studio Enthält Eine source.extension.vsixmanifest-Datei, die Angezeigt Und Über Einen Einfachen Doppelklick Bearbeitet Werden Kann. You can now Die Grundlegenden Metadateninformationen Über Ihre kopierendes Ausfüllen. Abbildung 4 Enthält Ein Beispiel.

Filling out the Metadata
Abbildung 4 Die Metadaten ausfüllen

Die Datei MsdnFsMvc3.zip Kann Nun Das Projekt VSIX in Visual Studio Hinzugefügt Werden. Zu Diesem Zweck Sie Zunächst Navigieren Sie Zum Stammverzeichnis des Projekts VSIX in Windows Explorer Und Erstellen Einen Neuen Ordner Mit Dem Namen ProjectTemplates. Fügen Sie in Diesem Ordner Einen Neuen Ordner Mit Dem Namen ASPNET. Die Erstellung des Zweiten Ordners ist, wurde den Untertyp des Projekts Für Die Projektvorlage Bestimmt. Die Datei MsdnFsMvc3.zip Wird Jetzt in Dem ASPNET-Ordner Kopieren.

Zurück in Den Visual Studio in der Entwurfsansicht, der Die Datei Source.Extension.vsixmanifest verwenden Sie Die Schaltfläche "Inhalt Hinzufügen" Then. Abbildung 5 Zeigt die Einträge an, Dass Sie in Dem Daraufhin Angezeigten Fenster Angeben Können.

Adding Content in the Design View of a Manifest File
Abbildung 5 Hinzufügen von Inhalt in der Designansicht Einer Manifestdatei

Die Verzeichnisstruktur, Die Automatisch in Das Projekt VSIX Durch Diesen Prozess Jetzt Erstellt Wird, Benötigt Ein Wenig Anpassung. Sie Tun, Indem you Mit der Rechten Maustaste Auf Den Ordner ProjectTemplates Und Erstellen Einen Neuen Ordner Mit Dem Namen ASPNET. Abschließend verwenden Sie Die Komprimierte Datei aus Dem Ordner ProjectTemplates in Das ASPNET-Ordner Verschieben and then click Yes, Wenn Sie Aufgefordert Werden, um die Vorhandene Datei Überschreiben. Erstellen der Lösung Schnell Offenbart, Dass die Erstellung der Vorlage VSIX Projekt von Visual Studio Erfolgreich ist. Falls Falls Gewünscht, Könnten Sie Jetzt Hinzufügen these kopierendes Zu Visual Studio Durch Double Auf Die .vsix-Datei, die von Visual Studio Erstellt Wurde Und Die Resultierende Installations-Assistenten Durchlauf.

Blenden Sie Die Projektvorlage

Die Schritte, die Sie Bisher Abgeschlossen Erreichen Das Erste Ziel Für Diese Vorlage Und Die Voraussetzungen Für Die Erreichung der Ziele des Rest. Diese Zusätzlichen 
goals Werden in Erster Linie Erreicht, Indem Die RunFinished-Methode von IWizard-Implementierung des Vorlagen-Assistenten Code Hinzufügen. Ich Werde Sie Jetzt Durch Den Code Erforderlich, um die übrigen Ziele Für Diese Vorlage necessary.

Sehen Sie der Code Für Das Zweite Ziel von Dynamisch Alle Projekte der Anwendungen Hinzufügen, Während der Projekterstellung Abbildung 6.

Abbildung 6 Dynamisch Projekte der Anwendungen hinzufügen

// This method can be found in the full source
// as part of the TemplateWizard class.
member this.RunFinished() =
 
  // Non-relevant code omitted.
// this.solution is set in the RunStarted method.
let templatePath = this.solution.GetProjectTemplate("MsdnFsMvc3.zip", "FSharp")
  let AddProject status projectVsTemplateName projectName =
    // this.dte2 is set in the RunStarted method
    this.dte2.StatusBar.Text <- status
    let path =
      templatePath.Replace("MsdnFsMvc3.vstemplate", projectVsTemplateName)
    this.solution.AddFromTemplate(path,
      Path.Combine(this.destinationPath, projectName),
      projectName, false) |> ignore
 
  // webName and webAppName are values that have been
  // bound to strings that identify specific projects.     
  AddProject "Installing the C# Web project..."
    (Path.Combine("MsdnWeb", "MsdnWeb.vstemplate")) webName
  AddProject "Adding the F# Web App project..."
    (Path.Combine("MsdnWebApp", "MsdnWebApp.vstemplate")) webAppName
 
  // Non-relevant code omitted.

Die Erste Codezeile in der Methode Angezeigt, die Abbildung 6 Gibt Den Pfad der Vorlage Mit Mehreren Projekten Auf Dem Computer, von Dem aus der Projekt-Assistent Gestartet Wurde. Die Zweite Definiert Eine Funktion Namens AddProject. Diese Funktion Enthält Den Code Zum Aktualisieren der Visual Studio-Statusleiste, Gibt Die Entsprechenden VSTEMPLATE-Datei, Die die Periodeneinheiten kopierendes Entspricht Und Das Projekt aus der Vorlage der Anwendungen Hinzugefügt. Die Letzten Codezeilen Rufen Die AddProject-Funktion Für Die Projekte MsdnWeb-Und MsdnWebApp. Ein Ähnlicher Aufruf von AddProject Könnte Auch Für Das Projekt MsdnWebAppTests Hinzugefügt Wurden, die Ggf. Wurden.

Um Das Dritte Ziel Dynamisch Hinzufügen von Einem Beliebigen Projektverweise Zu Erreichen, Müssen Sie Zuerst Erstellen Sie Eine Karte von Den Projektnamen Und Zugeordnete Projekt Objekte, aus Denen die Lösung (See Bit.ly/Fsharp-Maps Ordnet Informationen Auf F#). Stirbt What happened to Durch Aufrufen Einer Benutzerdefinierten Funktion Mit Dem Namen BuildProjectMap Mit Einem Bereitgestellten-Argument Eine Auflistung Aller Projekte in der Anwendungen.

Dies ist Dann in Einen Wert Mit Dem Namen "Projekte", Wie Hier Gezeigt Gebunden:

// This function can be found in the full source
// as part of the ProjectService module.
let BuildProjectMap (projects:Projects) =
  projects
  |> Seq.cast<Project>
  |> Seq.map(fun project -> project.Name, project)
  |> Map.ofSeq
 
// This method can be found in the full source
// as part of the TemplateWizard class.
member this.RunFinished() =
 
  // Non-relevant code omitted.
// this.dte is set in the RunStarted method.
let projects = BuildProjectMap (this.dte.Solution.Projects)
 
  // Non-relevant code omitted.

Jetzt Haben Sie Das Projekt Anzeigen, Können Sie Eine Andere Benutzerdefinierte Funktion-Kick-off Beim Hinzufügen der Projektverweise Aufrufen. Die Erste Zeile der Hier Fuentes Code Erstellt Eine Liste von Tulpen:

// This method can be found in the full source
// as part of the TemplateWizard class.
member this.RunFinished() =
 
  // Non-relevant code omitted.   
 
  // webName, webAppName and webAppTestsName are values that have been
  // bound to strings that are used to identify specific projects.     
  [(webName, webAppName); (webAppTestsName, webAppName)]
  |> BuildProjectReferences projects
 
  // Non-relevant code omitted.

Jedes Tupel in der Liste Stellt Den Namen der Das Zielprojekt, Gefolgt Vom Namen des Projekts, Auf Die Verwiesen Wird. Beispielsweise Gibt Das Erste Tupel Einen Ziel-Projektnamen "MsdnWeb" Mit Einer Zugeordneten Projekt Verweisname des "MsdnWebApp". Diese Liste Wird Dann an Die Funktion BuildProjectReferences Geleitet.

Dieser Code Zeigt Die BuildProjectReferences-Funktion:

// This function can be found in the full source
// as part of the ProjectService module.
let BuildProjectReferences (projects:Map<string, Project>) projectRefs =
  projectRefs
  |> Seq.iter (fun (target,source) ->
              AddProjectReference (projects.TryFind target)
                (projects.TryFind source))

Diese Funktion Nimmt die Liste von Tulpen, werden er, Versucht, Das Entsprechende Projekt-Objekt aus der Projektwegweiser Nach Namen ab Und Ruft Die AddProjectReference-Funktion, um die Eigentliche Arbeit.

Die Funktion AddProjectReference Wird Beendet, Den Prozess, Überprüfen Sie, Dass Die Zeilendefinitionsknoten Ziel-Und ProjToReference Ein Gültiges Projekt Enthalten, Wie Hier Gezeigt:

// This function can be found in the full source
// as part of the ProjectService module.
let AddProjectReference (target:Option<Project>)
  (projToReference:Option<Project>) =
  if ((Option.isSome target) && (Option.isSome projToReference)) then
      let vsTarget = target.Value.Object :?> VSProject
      vsTarget.References
      |> Seq.cast<Reference>
      |> Seq.filter(fun (reference) -> reference.Name = projToReference.Value.Name)
      |> Seq.iter(fun reference -> reference.Remove())
      vsTarget.References
        .AddProject((projToReference.Value.Object :?> VSProject).Project)
        |> ignore

Wenn Sie Gültige Projekte Enthalten, Wird Diese Funktion Alle Vorhandenen Verweis Entfernt. Schliesslich Fügt Sie Dem Projekt Den Verweis Hinzu.

Das Vierte Ziel Für Diese kopierendes ist Ein Konzept, Das Vor Kurzem von ASP Eingeführt Wurde.NET MVC-Teams. Es Bietet Eine Hervorragende Möglichkeit, Fügen Sie Verweise Auf Bibliotheken Oder Frameworks, die Wahrscheinlich in Nicht Zu Ferner Zukunft Erweitert Werden. 1.2 NuGet, der Im with von ASP.NET MVC 3 Tools Update Enthält Eine Assembly Mit Dem Namen NuGet.VisualStudio, die NuGet-Pakete Einfach Vom Innerhalb Eines Vorlagen-Assistenten Downloading. Die ASP.NET MVC 3 Tools Update you Fügt Auch Mehrere NuGet-Pakete Auf Dem Lokalen Computer, die quicker Installation Dieser Bestimmten Pakete Während der Projekterstellung Zuzulassen.

Es Gibt Ein Paar Verschiedene Funktionen in der Probe, die Zum Erreichen der NuGet-Paket-Installationen Verwendet Werden. Die Wichtigste ist Hier Show:

// This function can be found in the full source
// as part of the NuGetService module.
let InstallPackages (serviceProvider:IServiceProvider) (project:Project) packages =
  let componentModel =
    serviceProvider.GetService(typeof<SComponentModel>) :?> IComponentModel
  let installer = componentModel.GetService<IVsPackageInstaller>()
  let nugetPackageLocalPath = GetNuGetPackageLocalPath()
  packages
  |> Seq.iter (fun packageId ->
              installer.InstallPackage(nugetPackageLocalPath,
                project, packageId, null, false))

Die Ersten Drei Zeilen von Code in Dieser Funktion Werden Verwendet, um die Konkrete Implementierung der Schnittstelle IVsPackageInstaller Zu Erhalten, die Zum Installieren der Verschiedenen NuGet-Pakete Im Angegebenen Projekt Verwendet Wird. Die Vierte Zeile Code Ruft die GetNuGetPackageLocalPath-Funktion, Die Greift Auf Die Systemregistrierung, um Zu ermitteln, Den Installationspfad von ASP.NET MVC-3. Letzte Liste von Paket-Namen an Die Funktion Seq.iter Geleitet, Die Die Liste einer Schleife Durchlaufen Und Jedes Paket Installiert.

Nun, da Alle Diese Funktionalität Wurde in, die Guarantee Vorlagen-Assistenten, Müssen Sie Lediglich Die VSIX-Projekt Mit Einem Assistenten Vorlage des Assistentenprojekts Vorlage als Inhalt Hinzu. Abbildung 7 Zeigt Das Fenster Für Abgeschlossene Inhalt Hinzufügen. Dies Schließt Die Ziele 2 Bis 4.

The Completed Add Content Window
Abbildung 7 Die Abgeschlossenen Hinzufügen Content-Fenster.

Hinzufügen Einer Windows Presentation Foundation-UI

Der Prozess Für Das Endziel Realisieren – Hinzufügen Eine Benutzeroberfläche, die Zum Sammeln von Informationen Vom Benutzer Während des Erstellungsprozesses des Projekts Verwendet Werden Kann – Noch Nicht Viel in Den Vergangenen Jahren Geändert. Ein Artikel 2007 von o ' Reilly Media Inc. (oreil.ly/Build-Vs-Proj-Wiz) Bietet Einen Guten Überblick, Stirbt Zu Tun. Während die Prämisse des Prozesses Gleich Bleibt, Müssen Sie Implementieren Diese Funktionalität in Windows Presentation Foundation (WPF) Und Viagra in your kopierendes Ein Paar Dinge Wissen.

Um Zu Beginnen, Müssen Sie Zuerst Erstellen Sie Neue C# Bibliothek Eines Benutzersteuerelements. You should Jetzt Das Zielframework aus Ändern.NET Framework 4 Client Profile ein.NET Framework 4. You can then select the Standard UserControl1.xaml Entfernen Und Fügen Sie Ein Neues WPF-Fenster. Mit Welcher Methode Sie Bevorzugen, Können Sie Das XAML, um die Periodeneinheiten Benutzeroberfläche Entwickeln Jetzt Bearbeiten. Schliesslich Müssen Sie Alle Gewünschten Eigenschaften Verfügbar Machen, Und Definieren Sie Alle replaces Ereignishandler. Ein Einfaches Beispiel Für Das Codebehind Für Das WPF-Fenster Könnte folgendermassen Aussehen ist Hier Dargestellt:

// This can be found in the full source as part of the MsdnCsMvc3Dialog class.
public bool IncludeTestsProject { get; set; }
 
private void btnOk_Click(object sender, RoutedEventArgs e)
{
  IncludeTestsProject =
    cbIncludeTestsProject.IsChecked.HasValue ?
cbIncludeTestsProject.IsChecked.Value : false;
  DialogResult = true;
  Close();
}
 
private void btnCancel_Click(object sender, RoutedEventArgs e)
{
  Close();
}

Nach Dem Abrufen der Benutzeroberflächenautomatisierungs Genau Wie Sie es Wollen, Müssen Sie Die Assembly Signieren. Als Nächstes verwenden Sie Das Projekt Hinzufügen – als Inhalt Mit Einem Inhalt Typ des Vorlagen-Assistenten – Zum Projekt VSIX. Im Projekt-Assistenten Vorlage Fügen Sie Dann Einen Verweis Auf Das Projekt, Das die Benutzeroberfläche Enthält. Wenn Stirbt Alle Beendet ist, Müssen Sie Code an Die RunStarted-Methode von IWizard-Implementierung, Die Die Benutzeroberfläche Anzeigen Und erfassende Das Ergebnis Hinzufügen, Wie Hier Gezeigt:

// This method can be found in the full source
//as part of the TemplateWizard class.
member this.RunStarted () =
 
  // Non-relevant code omitted.
let dialog = new TemplateView()
  match dialog.ShowDialog().Value with
  | true ->
    this.includeTestProject <- dialog.IncludeTestsProject
  | _ ->
    raise (new WizardCancelledException())

Schliesslich Können Sie Den Folgenden Code an Die Methode RunFinished des Vorlagen-Assistenten Hinzufügen:

 

// This method can be found in the full source
//as part of the TemplateWizard class.
member this.RunFinished() =
 
  // Non-relevant code omitted
 
  // webAppTestsName is a value that has been bound
  // to a string that represents the tests project.     
  if this.includeTestProject then
    AddProject "Adding the F# Web App Tests project..."
      (Path.Combine("MsdnWebAppTests",
        "MsdnWebAppTests.vstemplate")) webAppTestsName
  // Non-relevant code omitted.

Wiederverwendung Und of der Zeit

Erstellen einer F# / c#-VSIX-Projektvorlage ist Eine Einfache Möglichkeit, die Förderung der Wiederverwendung Und of der Zeit Für Sich Wiederholende Setup verknüpfen Sie Verschwendet. Mit Diesen Fähigkeiten Nun in Ihrem Besitz Werden Sie in der Lage, Steigerung der Produktivität Durch Erstellen von Projektvorlagen, die so Wenig Oder so Viel Komplexität Enthalten, Wie Ihr Szenario Erfordert.

Daniel Mohl ist Ein Microsoft MVP Und F# Bezüglich Insider-Geschäften. Er Blogs Unter blog.danielmohl.com and you Folgen Ihm Auf Twitter Bei twitter.com/dmohl.

Dank der Folgenden Technischen Experten Für die Überprüfung Dieses Artikels: Elijah Manor, Chris Marinos and Richard Minerich