Anpassen der Startseite von Visual Studio .NET 2003

Veröffentlicht: 11. Mai 2003 | Aktualisiert: 22. Jun 2004

Von Elizabeth Murray, Jonathan Gordon

Dieser Artikel liefert einen umfassenden Überblick über den Aufbau der Startseite von Microsoft Visual Studio .NET 2003. Darüber hinaus wird beschrieben, wie Sie die Startseite durch Hinzufügen von neuem Inhalt anpassen können. Der Artikel enthält einige Beispiele und XML-Code, der zum Definieren des Inhalts verwendet wird.

Auf dieser Seite

Einführung Einführung
Funktionsweise der Startseite Funktionsweise der Startseite
Format der Registerkarten-Definitionsdatei Format der Registerkarten-Definitionsdatei
Hinzufügen von benutzerdefiniertem Inhalt zur Startseite Hinzufügen von benutzerdefiniertem Inhalt zur Startseite
Benutzerdefinierter Inhalt und Sicherheit Benutzerdefinierter Inhalt und Sicherheit
Leistungsüberlegungen Leistungsüberlegungen
Elemente und Attribute Elemente und Attribute
Testen und Problembehandlung des Startseiteninhalts Testen und Problembehandlung des Startseiteninhalts
Bereitstellen von benutzerdefiniertem Inhalt auf der Startseite Bereitstellen von benutzerdefiniertem Inhalt auf der Startseite
Erweiterte Elemente Erweiterte Elemente
Schlussfolgerung Schlussfolgerung
Beispiele für benutzerdefinierten Inhalt Beispiele für benutzerdefinierten Inhalt

Einführung

Die Startseite von Visual Studio .NET wird bei jedem Start der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) angezeigt. Der Standardinhalt stellt die neuesten Informationen für Entwickler bereit und fördert die Interaktion mit der Onlinecommunity für Entwickler.

In Visual Studio .NET 2003 enthält die Startseite drei Bereiche: Projects (Projekte), Online Resources (Onlineressourcen) und My Profile (Mein Profil). Der Inhalt des Bereichs Projects (Projekte) wird jetzt in einem Toolfenster angezeigt, während Online Resources (Onlineressourcen) und My Profile (Mein Profil) nach wie vor in einem Webbrowserfenster angezeigt werden, wobei das gleiche Modell wie bei der Visual Studio .NET 2002-Startseite verwendet wird. Durch Änderung des für die Anzeige des Bereichs Projects (Projekte) verwendeten Fenstertyps wird die IDE jetzt schneller geöffnet.

Um den Standardinhalt zu ergänzen, können Sie die Startseite anpassen, indem Sie neuen Inhalt zum Bereich Online Resources (Onlineressourcen) in Form von benutzerdefinierten Registerkarten hinzufügen. Dabei handelt es sich um die Seiten mit Inhalten, die im Bereich Online Resources (Onlineressourcen) angezeigt werden, wie etwa die Registerkarten Search Online (Onlinesuche) und Get Started (Erste Schritte). Das Hinzufügen weiterer Bereiche zur Startseite ist nicht möglich. Der Standardinhalt bleibt erhalten. Sie können zwar neuen Inhalt hinzufügen, es ist jedoch nicht möglich, den vorhandenen Standardinhalt zu ändern. Der Standardinhalt für den Bereich Online Resources (Onlineressourcen) wird über einen Server zur Verfügung gestellt. Da auf dem lokalen Computer keine statischen Inhalte mehr gespeichert werden, müssen Sie mit dem Internet oder einem Netzwerk verbunden sein, um den Standardinhalt der Online Resources (Onlineressourcen) anzuzeigen.

Dieser Artikel enthält eine Reihe von Beispielen dafür, wie Sie neue Inhalte für die Startseite erstellen und diese dem vorhandenen Bereich Online Resources (Onlineressourcen) hinzufügen. Um neue Inhalte für die Startseite zu erstellen, benötigen Sie einige XML-Kenntnisse und einen Text-Editor wie etwa den Visual Studio Code-Editor oder den Microsoft Editor.

Funktionsweise der Startseite

Der Bereich Online Resources (Onlineressourcen) besteht aus einer clientseitigen HTM-Seite, in diesem Fall default.htm, auf der eine Liste mit Registerkarten angezeigt wird. Diese Registerkarten basieren auf Registerkarten-Definitionsdateien, die mithilfe von XML erstellt wurden. Standardregisterkarten-Definitionsdateien werden auf einem Server gespeichert, während benutzerdefinierte Registerkarten-Definitionsdateien lokal gespeichert werden. Wenn Sie eine Registerkarte auswählen, liest Visual Studio die mit dieser Registerkarte verbundene Registerkarten-Definitionsdatei. Falls die Registerkarten-Definitionsdatei einen Feed enthält, wird der Inhalt für die Registerkarte gemäß der Registerkarten-Definitionsdatei von einem Server heruntergeladen. Falls die Datei keinen Feed enthält, wird stattdessen statischer Inhalt in der Registerkarten-Definitionsdatei angezeigt. Siehe Abbildung 1 unten.

Abbildung 1
Abbildung 1

Der gesamte Inhalt wird von der clientseitigen Schemaüberprüfungsdatei vstab.xdr überprüft, die sich in einer Ressourcen-DLL-Datei befindet, ehe er transformiert und auf der Startseite ausgegeben wird. Nachdem der Inhalt überprüft wurde, wird er mithilfe der clientseitigen Transformierung vshome.xsl, die sich ebenfalls in einer Ressourcen-DLL befindet, als HTML ausgegeben. Falls die Überprüfung des Inhalts fehlschlägt, wird die Registerkarte nicht auf der Startseite angezeigt. Bei jeder Ausgabe einer Registerkarte wird der Inhalt der Registerkarte auf dem lokalen Computer zwischengespeichert. Falls der Feed für den Inhalt nicht verfügbar ist, z.B. wenn Sie nicht mit dem Internet verbunden sind, wird der zuletzt abgerufene Inhalt für die Registerkarte angezeigt.

Format der Registerkarten-Definitionsdatei

Benutzerdefinierter Inhalt für die Startseite wird in Registerkarten-Definitionsdateien definiert, die mithilfe von XML geschrieben werden. Eine Registerkarten-Definitionsdatei kann eine oder mehrere Registerkarten enthalten. Der zum Definieren des benutzerdefinierten Inhalts verwendete XML-Code muss dem in vstab.xdr enthaltenen XML-Schema der Startseite entsprechen, damit er auf der Startseite angezeigt werden kann.

Anmerkung:
Die im Beispiel genannten Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden. Jede Ähnlichkeit mit tatsächlichen Organisationen, Produkten, Domänennamen, E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen ist rein zufällig.

Die unten aufgeführten XML-Elemente und -Attribute bilden die Grundlage einer Registerkarten-Definitionsdatei für die Startseite.

<TabDefinition> 
   <Tab ID="uniquename" Name="displayname"> 
   <Application ID="uniquename"> 
   <PaneSet ID="uniquename"> 
   <Pane ID="uniquename" Title="displayname"> 
   <LinkGroupSet ID="uniquename"> 
   <LinkGroup ID="uniquename" Title="displayname"> 
   </LinkGroupSet> 
   </Pane> 
   </PaneSet> 
   <Data> 
   <Context> 
   <Links> 
   <LItemEx> 
   <LItem ID="uniquename" LinkGroup="linkgroupid" 
 URL="urlpath"> displaytext </LItem> 
   </LItemEx> 
   </Links> 
   </Context> 
   </Data> 
   </Application> 
   <Feeds> 
   <Feed> 
   <Source LCID="locale" URL="urlpath"> 
   <Arg Name="name"></Arg> 
   </Source> 
   </Feed> 
   </Feeds> 
   </Tab> 
</TabDefinition>

Hinzufügen von benutzerdefiniertem Inhalt zur Startseite

Sie können die Startseite anpassen, indem Sie benutzerdefinierte Registerkarten mit statischem oder dynamischem Inhalt dem Bereich Online Resources (Onlineressourcen) hinzufügen. Es sind auch andere Änderungen an der Startseite möglich, dies wird jedoch nicht von Microsoft unterstützt. Es folgen einige Zusatzinformationen, die beim Erstellen von benutzerdefiniertem Inhalt beachtet werden sollten:

  • Der gesamte Inhalt muss dem Schema der Startseite (vstab.xdr) entsprechen, sonst wird der Inhalt nicht an die Startseite ausgegeben.

  • Clientseitige Skripts können nicht als Inhalt für die Startseite verwendet werden.

  • Die Reihenfolge, in der die Standardregisterkarten im Bereich Online Resources (Onlineressourcen) auf der Startseite angezeigt werden, kann nicht geändert werden. Standardregisterkarten werden vor benutzerdefinierten Registerkarten angezeigt.

  • Der Inhalt oder das Format der Standardregisterkarten, die in Visual Studio bereitgestellt sind, kann nicht geändert werden.

Benutzerdefinierter Inhalt und Sicherheit

Der vom Server gesendete Inhalt und der auf dem Client gespeicherte Inhalt werden überprüft, um sicherzustellen, dass der Inhalt dem Schema der Startseite entspricht, ehe er auf der Startseite ausgegeben wird. Clientseitiger Inhalt ist genauso sicher wie eine Datei, die lokal auf einem Computer gespeichert ist.

Da der Inhalt auf dem Server über HTTP bereitgestellt wird, wird eine Überprüfung des Inhalts auf dem Server empfohlen, ehe er an den Client weitergegeben wird. Auf diese Weise wird sichergestellt, dass kein gefährlicher Inhalt an den Client zurückgegeben wird. In Beispiel 4 enthält serverFeed.asp JavaScript-Code, der den durch serverFeed.xml zurückgegebenen XML-Code überprüft:

// The following function takes an xml document  
// and selects content based on a given xpath query,  
// ensuring that the resulting xml contains URLs  
// that begin with either http:, https:, news:, ms-help: or vs:. 
function replaceBadURLs(xpath, xmlDocument) 
{ 
   var i = 0; 
   var regex = "^http:|^https:|^news:|^ms-help:|^vs:"; // search for appropriate URL format 
   var nodes = xmlDocument.selectNodes(xpath); // select xml using xpath query 
   for(i = 0 ; i < nodes.length ; i++) // check that each item conforms to appropriate URL format 
   { 
   if(!nodes.item(i).text.match(regex)) // If item does not conform, zero out the item 
   { 
   nodes.item(i).text = ""; 
   } 
   } 
}

Leistungsüberlegungen

Sie sollten überprüfen, ob der Inhalt einer Registerkarte in angemessener Zeit auf der Startseite ausgegeben wird. Wenn das Laden einer Registerkarte zu viel Zeit in Anspruch nimmt, wird ein Benutzer die Registerkarte oder die Startseite möglicherweise nicht mehr verwenden.

Wenn in einer Registerkarten-Definitionsdatei Bilder auf einem Remoteserver referenziert werden, die Registerkarten-Definitionsdatei eine große Menge an Inhalt enthält und die Serverleistung sehr niedrig ist, kann dies zu langsameren Ausgabezeiten führen. Enthält die lokale Registerkarten-Definitionsdatei Verweise auf Netzwerk- oder Webinhalte, kann das Laden dieser Inhalte verzögert werden, wenn die Startseite versucht, diese Inhalte für den Bereich Online Resources (Onlineressourcen) abzurufen. Um die Ladenzeiten für den Bereich Online Resources ((Onlineressourcen) zu verringern, sollten Sie zum Abrufen von Inhalten von einem Netzwerk oder einer Website das <Feed>-Element verwenden. Testen Sie stets die Registerkartenleistung, ehe Sie benutzerdefinierte Registerkarten in einer Produktionsumgebung bereitstellen.

Elemente und Attribute

Grundlegende Elemente und Attribute

Die folgenden Elemente und Attribute bilden die Grundlage für die Registerkarten-Definitionsdatei.
<TabDefinition></TabDefinition>
Erforderlich. Das Stammelement, das alle untergeordneten Elemente für die Datei enthält.
<Tab></Tab>
Erforderlich. Ein untergeordnetes Element von <TabDefinition>. In einer Registerkarten-Definitionsdatei muss mindestens ein <Tab>-Element vorhanden sein. Dieses Element enthält die Attribute ID, Name und Filterable.
<Application></Application>
Erforderlich. Ein untergeordnetes Element des <Tab>-Elements, das die Benutzeroberfläche für die Registerkarte definiert. Dieses Element enthält das ID-Attribut.
"ID"-Attribut
Erforderlich. Eine eindeutige ID für das Element.
"Name"-Attribut
Erforderlich. Der Anzeigename für das Element.
"Filterable"-Attribut
Optional. Hat die Werte TRUE und FALSE. Wenn der Wert TRUE ist, wird die Dropdownliste Filter angezeigt, und der zutreffende Inhalt der Registerkarte wird auf der Grundlage des von Ihnen ausgewählten Filters gefiltert. Wenn der Wert FALSE ist, wird die Dropdownliste nicht angezeigt und der Inhalt nicht gefiltert. Weitere Informationen zum Filtern von Inhalten finden Sie unter ""<Data>"- und "<Feed>"-Elemente für Registerkarten".

Der folgende Code ist ein Beispiel für eine einfache Registerkarten-Definitionsdatei, die Informationen zu zwei benutzerdefinierten Registerkarten für die Startseite enthält, Tab1 und Tab2. Tab1 enthält filterbaren, dynamischen Inhalt, während Tab2 nicht gefilterten, statischen Inhalt enthält.

<TabDefinition> 
   <Tab ID="MyTab" Name="Tab1" Filterable="true"> 
   <Application ID="MyApp"> 
   <!--Place UI elements in this section.--> 
   </Application> 
   <Data> 
   <---Place offline Data elements in this section--> 
   </Data> 
   <Feeds> 
   <!--Place Feed elements in this section--> 
   </Feeds> 
   </Tab> 
   <Tab ID="MyOtherTab" Name="Tab2" Filterable="false"> 
   <Application ID="MyOtherApp"> 
   <!--Place UI elements in this section.--> 
   <Data> 
   <---Place static Data elements in this section--> 
   </Data> 
   </Application> 
   </Tab> 
</TabDefinition>

UI-Elemente
Die Benutzeroberfläche für benutzerdefinierten Inhalt ist innerhalb des <Application>-Elements der Registerkarten-Definitionsdatei definiert. Jede Benutzeroberfläche für eine Registerkarte wird mit einem der folgenden beiden Elemente definiert: <PaneSet> oder <Pane>.

Die folgende Tabelle enthält eine Liste der in diesem Abschnitt behandelten Elemente.

 

<PaneSet></PaneSet> Optional. Definiert das Anzeigen des Inhalts in mehreren Bereichen mit Unterregisterkarten. Dieses Element enthält das ID-Attribut. Eine Gruppe von Bereichen sehen Sie in Beispiel 2.

Das folgende XML-Fragment definiert z.B. mehrere Bereiche in Unterregisterkarten:

   <Application ID="MyApp"> 
   <PaneSet ID="MyPaneSet"> 
   <Pane ID="MyPane1" Title="My First Pane"> 
   <!--Place UI elements in this section.--> 
   </Pane> 
   <Pane ID="MyPane2" Title="My Second Pane"> 
   <!--Place UI elements in this section.--> 
   </Pane> 
   </PaneSet> 
   </Application>

<Pane></Pane> Optional. Definiert das Anzeigen des Inhalts in einem einzelnen Bereich. Dieses Element enthält die Attribute ID und Title. Einen einzelnen Bereich sehen Sie in Beispiel 2.

Das folgende XML-Fragment definiert z.B. einen einzelnen Bereich.

<Application ID="MyOtherApp"> 
   <Pane ID="MyPane1" Title="My First Pane"> 
   <!--Place UI elements in this section.--> 
   </Pane> 
</Application>

Innerhalb des <Pane>-Elements können die folgenden UI-Elemente zum Anzeigen von Inhalt verwendet werden.

<Image></Image> Optional. Ermöglicht das Anzeigen einer Grafik in einem Bereich. Dieses Element enthält die Attribute ID, Source, Height, Width und AltText.
Beispiel:

<Image ID="MyImage" Source="<A href="
http://www.test-1.msn.com/warning.gif">
http://www.test-1.msn.com/warning.gif</A>"  
Height="40" Width="40" AltText="My Image" /> 

<TextSpan></TextSpan> Optional. Zeigt statischen Text an, der formatiert werden kann. <TextSpan> kann optional die Elemente <Break> und <Image> enthalten. Dieses Element enthält die Attribute ID, FontFamily und FontSize.

Das folgende XML-Fragment ist z.B. ein einfaches <TextSpan>-Element:

<TextSpan ID="TextSpanSimple">This is a Simple TextSpan</TextSpan>

Das folgende XML-Fragment ist z.B. ein formatiertes <TextSpan>-Element:

<TextSpan ID="TextSpanFormatted" FontFamily="Tahoma" FontSize="14">This  
is a TextSpan in Tahoma, 24pt</TextSpan>

Das folgende XML-Fragment enthält z.B. die Elemente <Image> und <Break> als Teil des <TextSpan>-Elements:

<TextSpan ID="TestTextSpan"> 
   <Image ID="TestSpanImage1" Source= 
   "<A href="http://www.test-1.msn.com/warning.gif">http://www.test-1.msn.com/warning.gif</A>"  
Height="40" Width="40" AltText="Image 1 Inside Span" />Text for Image 1  
inside TextSpan 
   <Image ID="TestSpanImage2" Source= 
"<A href="http://www.test-1.msn.com/warning.gif">http://www.test-1.msn.com/warning.gif</A>"  
Height="40" Width="40" AltText="Image 2 Inside Span" />Text for Image 2  
inside TextSpan 
   <Break/> 
   <Image ID="TestSpanImage3" Source="<A href="
http://www.test-1.msn.com/">
http://www.test-1.msn.com/</A> 
warning.gif"  
Height="40" Width="40" AltText="Image 3 Inside Span" />Text for Image 3  
inside TextSpan 
</TextSpan>

<Break></Break>
Optional. Fügt einen Zeilenumbruch ein.

<HRule></HRule>
Optional. Zeigt eine horizontale Führungslinie an.

<Title></Title> Optional. Zeigt Text fett formatiert an.
Beispiel:

<Title>This is a title.</Title>

<Hyperlink></Hyperlink>
Optional. Zeigt einen Hyperlink an. Dieses Element enthält die Attribute ID, URL und Relative.
Dieses XML-Fragment enthält z.B. eine Verknüpfung zu einem Bild auf dem Webserver www.test-1.msn.com:

<Hyperlink ID="TestHyperlink1"  
URL="<A href="http://www.test-1.msn.com/warning.gif">
http://www.test-1.msn.com/warning.gif</A>">Hyperlink</Hyperlink>

Dieses XML-Fragment enthält z.B. eine Verknüpfung zu einem Thema in der MSDN-Hilfe. Das Relative-Attribut gibt an, dass vor dem Öffnen des Themas die lokale Hilfeauflistung, ms-help://<Auflistung>, nach dem Wert abgefragt wird, der im URL-Attribut festgelegt ist.

<Hyperlink ID="TestHyperlink2" Relative="1"  
URL="/ms.msdnvs/vsintro7/HTML/vxoriWhatsNewInVisualStudio.htm"> 
Hyperlink to Help topic</Hyperlink>

<LinkGroup></LinkGroup>
Optional. Definiert die Platzierung einer Gruppe von LItem-Elementen in einem <Pane>- oder <PaneSet>-Element. Dieses Element enthält die Attribute ID und Title.
Beispiel:

<LinkGroup ID="LG1" Title="My LinkGroup" /> 
   <Data> 
   <Context> 
   <Links> 
   <LItemEx> 
   <LItem ID="LI1" LinkGroup="LG1" Image="<A href="http://www.test">http://www.test</A>- 
1.msn.com/warning.gif">LItem in My Link Group</LItem> 
   <Blurb>Text describing LItem.</Blurb> 
   </LItemEx> 
   </Links> 
   <Context> 
   <Data>

<LinkGroupSet></LinkGroupSet>
Optional. Eine Gruppe von <LinkGroup>-Elementen.
Beispiel:

<LinkGroupSet> 
   <LinkGroup ID="LG1" /> 
   <LinkGroup ID="LG2" /> 
</LinkGroupSet>

"ID"-Attribut
Erforderlich. Eine eindeutige ID für das Element.
"Title"-Attribut
Erforderlich. Der Anzeigename für das Element.
"Source"-Attribut
Erforderlich. Ein vollständiger Pfad oder URL für ein Bild.
"Height"-Attribut
Optional. Die vertikale Größe eines Bildes, angegeben in Pixel.
"Width"-Attribut
Optional. Die horizontale Größe eines Bildes, angegeben in Pixel.
"AltText"-Attribut
Optional. Der Text, der ausgegeben wird, falls das Bild nicht im Bereich angezeigt wird.
"FontFamily"-Attribut
Optional. Gibt die für den Anzeigetext verwendete Schriftart an, z.B. Tahoma oder Verdana.
"FontSize"-Attribut
Optional. Der Schriftgrad, angegeben in Punkt.
"URL"-Attribut
Erforderlich. Ein absoluter Web-URL, der mit http:, https:, news:, ms-help: oder vs: beginnen muss. Verwenden Sie dieses Attribut zusammen mit dem Relative-Attribut, um einen relativen URL anzugeben, z.B. ein Thema in der MSDN-Hilfe.
"Relative"-Attribut
Optional. Hat den Wert 1. Verwenden Sie dieses Attribut, um auf einen URL für ein Thema in der MSDN-Hilfe zu zeigen. Dieses Attribut gibt an, dass sich der vom URL-Attribut gelieferte Wert in der MSDN-Hilfeauflistung befindet.

"<Data>"- und "<Feed>"-Elemente für Registerkarten
Das <Data>-Element in der Registerkarten-Definitionsdatei enthält Inhalte für eine Registerkarte, die als Verknüpfungen angezeigt werden und eine optionale Zusammenfassung oder ein Bild enthalten können. Mithilfe des <Feed>-Elements können Sie statische Verknüpfungen anzeigen, wenn Sie offline sind. Sie können aber auch auf den Server zeigen und Argumente übergeben, um aktualisierten Inhalt abzurufen, wenn eine Verbindung zum Internet besteht.

In diesen Abschnitt werden die folgenden Elemente behandelt:

<Data>

<AItem>

<Links>

<Context>

<Attributes>

<LItemEx>

<LItem>

<Blurb>

<Feeds>

<Feed>

<Source>

<Arg>

<Data></Data>
Optional. Eine Liste der Verknüpfungen, die auf der Registerkarte angezeigt werden.

<Context></Context>
Erforderlich. Wird zum Definieren von Gruppen von <LItem>-Elementen verwendet, die optional gefiltert werden können. Dieses Element enthält die Elemente <Attributes> und <Links> und ist ein untergeordnetes Element des <Data>-Elements.

<Attributes></Attributes>
Optional. Gibt die Attribute für den Inhalt im <Context>-Element an, damit Verknüpfungen auf der Registerkarte mithilfe vordefinierter Hilfefilter gefiltert werden können. Dieses Element enthält das <AItem>-Element.

<AItem></AItem>
Optional. Gibt ein Attribut an, das der Gruppe von Verknüpfungen innerhalb des <Context>-Elements zugeordnet wird, damit diese mit den vordefinierten Hilfefiltern interagieren. Dieses Element enthält die Attribute Name und Value.

<Links></Links>
Erforderlich. Eine Gruppe mit Verknüpfungen, die optional auf der Registerkarte gefiltert werden können. Übergeordnetes Element von <LItemEx> und <LItem>.

<LItemEx></LItemEx>
Optional. Ein übergeordnetes Element ohne Attribute, das das <LItem>-Element und optional das <Blurb>-Element enthält.
Beispiel:

<LItemEx> 
   <LItem ID="LI1" LinkGroup="LG1"  
Image="<A href="http://www.test-1.msn.com/warning.gif">
http://www.test-1.msn.com/warning.gif</A>">LItem with text and  
an image.</LItem> 
   <Blurb>Text describing LItem.</Blurb> 
</LItemEx>

<LItem></LItem>
Erforderlich. Ein Hyperlink, z.B. http, https, ms-help, mail oder news, der ein Bild enthalten kann. Dieses Element enthält die Attribute ID, LinkGroup und Image.

<Blurb></Blurb>
Optional. Enthält statischen Text für das <LItemEx>-Element.

<Feeds></Feeds>
Optional. Ein untergeordnetes Element von <Tab>, das das Downloaden von serverseitigem Inhalt für eine Registerkarte definiert.

<Feed></Feed>
Erforderlich. Ein untergeordnetes Element von Feeds.

<Source></Source>
Erforderlich. Dieses Element zeigt auf Inhalt auf dem Server. Enthält die Attribute LCID und URL.

<Arg></Arg> Optional. Dieses Element übergibt zusätzliche Argumente zusammen mit dem Feed-URL. Es enthält das Name-Attribut
Beispiel:

<Feeds> 
   <Feed> 
   <Source LCID="1033" URL="<A href="http://myserver/myfeed.aspx">http://myserver/myfeed.aspx</A>"> 
   <Arg Name="feedName">defaultFeed</Arg> 
   </Source> 
   </Feed> 
</Feeds>

Durch diesen Feed wird der folgende URL aufgerufen, um Inhalt für die Registerkarte abzurufen:
<http://myserver/myfeed.aspx?hasArgs=y&feedName="defaultFeed"&FeedLCID=1033&UserLang=en-us>.

"ID"-Attribut
Erforderlich. Eine eindeutige ID für das Element.
"URL"-Attribut
Erforderlich. Ein absoluter Web-URL, der mit http:, https:, news:, ms-help: oder vs: beginnen muss.
"Image"-Attribut
Erforderlich. Ein vollständiger Pfad oder URL für ein Bild.
"LinkGroup"-Attribut
Optional. Die ID für das <LinkGroup>-Element, in dem LItem enthalten ist.
"Name"-Attribut
Erforderlich. Der Name einer Kategorie von Hilfeattributen. Weitere Informationen zu Hilfeattributen finden Sie unter "Erstellen und Verwenden von Filtern" in der MSDN Library-Hilfe.
"Value"-Attribut
Erforderlich. Wert eines Hilfeattributs.
Beispiel für ein <Data>-Element:

<Data> 
   <Context> 
   <Attributes> 
   <AItem Name="DocSet" Value="Visual Studio" /> 
   <AItem Name="Product" Value="VS" /> 
   </Attributes> 
   <Links> 
   <LItemEx> 
   <LItem ID="LI1" LinkGroup="LG1" URL="  
<A href="http://www.test-1.msn.com/warning.gif">http://www.test-1.msn.com/warning.gif</A>" Image="  
<A href="http://www.test-1.msn.com/warning.gif">http://www.test-1.msn.com/warning.gif</A>  
">This link displays when the Visual Studio filter is applied.</LItem> 
   <Blurb>Blurb describing Link</Blurb> 
   </LItemEx> 
   </Links> 
   </Context> 
</Data>

LCID-Attribut
Optional. Die Gebietsschema-ID für die Zielsprache.

Sprache

LCID

Chinesisch (traditionell)

1028

Deutsch

1031

Englisch

1033

Französisch

1036

Italienisch

1040

Japanisch

1041

Koreanisch

1042

Chinesisch (vereinfacht)

2052

Spanisch

3082

Neue Benutzeroberflächenelemente
Die folgenden Elemente sind neu bei Visual Studio .NET 2003:

<LinkGroup>

<LinkGroupSet>

<Table>

<TableRow>

<TableCell>

<ListBox>

<ListBoxItem>

<RadioButton>

<RadioGroup>

<RootNode>

<ContainerNode>

<ItemNode>

<TextField>

<PasswordField>

<Button>

<CheckBox>

<HiddenField>

<FileField>

 

<Label>

<Table></Table>
Optional. Übergeordnetes Element von <TableRow> und <TableCell>. Dieses Element enthält die optionalen Attribute ID, Align, Border, CellPadding, CellSpacing, Height, Width und Title.
Beispiel:

<Table Border="1" Height="200" Width="200"> 
   <TableRow> 
   <TableCell ColSpan="3" Align="center" Valign="middle"><TextSpan>Cell 1</TextSpan></TableCell> 
   </TableRow> 
   <TableRow> 
   <TableCell RowSpan="2"><TextSpan>Cell 2</TextSpan></TableCell> 
   <TableCell><TextSpan>Cell 3</TextSpan></TableCell> 
   <TableCell><TextSpan>Cell 4</TextSpan></TableCell> 
   </TableRow> 
   <TableRow> 
   <TableCell><TextSpan>Cell 5</TextSpan></TableCell> 
   <TableCell RowSpan="2"><TextSpan>Cell 6</TextSpan></TableCell> 
   </TableRow> 
   <TableRow> 
   <TableCell><TextSpan>Cell 7</TextSpan></TableCell> 
   <TableCell><TextSpan>Cell 8</TextSpan></TableCell> 
   </TableRow> 
</Table>

<TableRow></TableRow>
Erforderlich. Übergeordnetes Element von <TableCell>. Dieses Element enthält keine Attribute.

<TableCell></TableCell>
Erforderlich. Dient zur Aufnahme von Inhalten in einer Tabelle. Dieses Element enthält die optionalen Attribute ID, Align, ColSpan, NoWrap, RowSpan und Title.

<ListBox></ListBox>
Optional. Übergeordnetes Element von <ListBoxItem>, das der Anzeige von Elementen in einer Dropdownliste dient. Dieses Element enthält die optionalen Attribute ID und Size.
Beispiel:

   <ListBox> 
   <ListBoxItem>One</ListBoxItem> 
   <ListBoxItem>Two</ListBoxItem> 
   <ListBoxItem>Three</ListBoxItem> 
   </ListBox>

<ListBoxItem></ListBoxItem>
Optional. Elemente in einer Liste. Wird innerhalb des <ListBox>-Elements verwendet. Dieses Element enthält die optionalen Attribute ID und Value.
Beispiel:

<ListBoxItem Value="Value1">Item 1</ListBoxItem>

<RadioGroup></RadioGroup>
Optional. Übergeordnetes Element von <RadioButton>. Dieses Element enthält die optionalen Attribute ID, GroupName, Selected und BreaksBetween.
Beispiel:

   <RadioGroup ID="radio1" BreaksBetween="true"> 
   <RadioButton Checked="true">Option 2</RadioButton> 
   <RadioButton>Option 1</RadioButton> 
   </RadioGroup>

<RadioButton></RadioButton>
Optional. Ein Optionsfeld. Wird innerhalb des <RadioGroup>-Elements verwendet. Dieses Element enthält die optionalen Attribute ID, AccessKey und Checked.

<RootNode></RootNode>
Optional. Ein übergeordneter Knoten ohne Attribute, der das <ContainerNode>-Element enthält. Mit diesem Element erstellen Sie eine Benutzeroberfläche mit Strukturansicht.
Beispiel:

<RootNode> 
   <ContainerNode ID="MyContainer1" AltText="My Container" Title="Container" 
   OpenedImage="vs:/images_greenfolder.gif" ClosedImage="vs:/images_greenfoldero.gif" 
   Height="13" Width="16" State="closed"> 
   <ItemNode> 
   <Hyperlink ID="TestHyperlink1A"
URL="<A href="https://localhost/warning.gif">https://localhost/warning.gif</A>">Hyperlink</Hyperlink> 
   </ItemNode> 
   <ItemNode> 
   <Hyperlink ID="TestHyperlink1A1"
URL="<A href="https://localhost/warning.gif">https://localhost/warning.gif</A>">Hyperlink</Hyperlink> 
   </ItemNode> 
   <ContainerNode ID="MyContainer2" Title="Container" 
   OpenedImage="vs:/images_greenfolder.gif" ClosedImage="vs:/images_greenfoldero.gif" 
   Height="13" Width="16" State="closed"> 
   <ItemNode> 
   <Hyperlink ID="TestHyperlink1A2"
URL="<A href="https://localhost/warning.gif">https://localhost/warning.gif</A>">Hyperlink</Hyperlink> 
   </ItemNode> 
   </ContainerNode> 
   </ContainerNode> 
</RootNode>

<ContainerNode></ContainerNode>
Erforderlich. Dient als Container in einer Benutzeroberfläche mit Strukturansicht. Dieses Element enthält das <ItemNode>-Element sowie die optionalen Parameter ID, AltText, Title, OpenedImage, ClosedImage, Height, Width und State.

<ItemNode></ItemNode>
Optional. Ein übergeordneter Knoten ohne Attribute, der Steuerelemente oder Text in einem Strukturansicht-Steuerelement enthält. <TextField></TextField>
Optional. Ein Textfeld für die Benutzereingabe. Dieses Element enthält die optionalen Attribute ID, Size und MaxLength.

<TextField ID="TestTextField" Size="50" MaxLength="20">My Text Field</TextField>

<PasswordField></PasswordField>
Optional. Zeigt eingegebene Zeichen als Sternchen (*) an, um Kennwörter und andere Informationen zu schützen. Dieses Element enthält die optionalen Attribute ID, Size und MaxLength.

<Button></Button>
Optional. Eine Schaltfläche. Dieses Element enthält die optionalen Attribute ID und Text.
Beispiel:

<Button ID="TestButton" Text="Button" />

<CheckBox></CheckBox>
Optional. Ein Kontrollkästchen. Dieses Element enthält die optionalen Attribute ID, Checked und AccessKey.
Beispiel:

<CheckBox ID="TestCheckBox" Checked="true" AccessKey="x">Check Box</CheckBox>

<HiddenField></HiddenField>
Optional. Ein ausgeblendetes Feld. Dieses Element enthält das optionale ID-Attribut.
Beispiel:

<HiddenField ID="TestHiddenField">My Hidden Field</HiddenField>

<FileField></FileField>
Optional. Ein Dateiauswahlfeld. Dieses Element enthält die optionalen Attribute ID, Size und MaxLength.
Beispiel:

<FileField ID="TestFileField" Size="50" MaxLength="20" />

<Label></Label>
Optional. Eine Textbezeichnung. Dieses Element enthält die optionalen Attribute ID, AccessKey und For.
Beispiel:

<Label ID="TestLabel" AccessKey="L" For="TestTextField">Label:</Label>

"BreaksBetween"-Attribut
Erforderlich. Wählen Sie die Werte TRUE oder FALSE. Wenn jedes Optionsfeld in einer separaten Zeile angezeigt werden soll, wählen Sie TRUE. Wenn alle Optionsfelder nebeneinander auf einer Zeile angezeigt werden sollen, wählen Sie FALSE.
"Border"-Attribut
Optional. Die Größe des Randes für die Tabelle.
"Height"-Attribut
Optional. Die vertikale Größe des Steuerelements.
"Width"-Attribut
Optional. Die horizontale Größe des Steuerelements.
"ColSpan"-Attribut
Optional. Legt fest, wie viele Spalten eine Tabellenzelle in der Breite einnimmt.
"Align"-Attribut
Optional. Legt fest, wo der Text horizontal in der Tabellenzelle ausgerichtet wird. Wählen Sie einen der folgenden Werte aus: center, left und right.
"Valign"-Attribut
Optional. Legt fest, wo der Text vertikal in der Tabellenzelle ausgerichtet wird. Wählen Sie einen der folgenden Werte aus: baseline, bottom, center, middle und top.
"RowSpan"-Attribut
Optional. Legt fest, wie viele Zeilen eine Tabellenzelle in der Länge einnimmt.
"Title"-Attribut
Optional. Legt den Anzeigenamen eines <ContainerNode> in einer Strukturansicht-Benutzeroberfläche oder im Titel der Tabelle fest.
"OpenedImage"-Attribut
Optional. Legt fest, welche Grafik bei Erweiterung von <ContainerNode> verwendet wird.
"ID"-Attribut
Optional. Eine eindeutige ID für das Element.
"CellPadding"-Attribut
Optional. Die Abstände innerhalb der Zellen in der Tabelle.
"CellSpacing"-Attribut
Optional. Die Abstände zwischen den Zellen in der Tabelle.
"Title"-Attribut
Optional. Der Titel des Steuerelements.
"NoWrap"-Attribut
Optional. Legt fest, ob Text in einer Tabellenzelle umgebrochen werden soll.
"Size"-Attribut
Optional. Anzahl der angezeigten Elemente in einer ListBox oder Größe eines TextField- oder PasswordField-Elements.
"Value"-Attribut
Optional. Wert bei Auswahl eines ListBox-Elements.
"GroupName"-Attribut
Optional. Name, der mit allen RadioButton-Elementen in einem RadioButtonGroup-Element verknüpft werden soll.
"Selected"-Attribut
Optional. Ausgewähltes RadioButton-Element innerhalb des RadioButtonGroup-Elements.
"AccessKey"-Attribut
Optional. Taste für den Zugriff auf das Steuerelement über die Tastatur.
"For"-Attribut
Erforderlich. ID des Steuerelements, das mit einer Textbezeichnung verknüpft werden soll.
"Checked"-Attribut
Optional. RadioButton ist aktiviert.
"AltText"-Attribut Optional. Der Text der angezeigt wird, wenn sich der Mauszeiger über dem ContainerNode befindet. "ClosedImage"-Attribut
Optional. Legt fest, welche Grafik beim Reduzieren von <ContainerNode> verwendet wird.
"State"-Attribut
Optional. Status von <ContainerNode>. Wählen Sie die Werte opened oder closed.
"MaxLength"-Attribut
Optional. Maximale Anzahl der zulässigen Zeichen.

Testen und Problembehandlung des Startseiteninhalts

Wenn benutzerdefinierter Inhalt nicht wie erwartet angezeigt wird, können Sie die folgenden Schritte ausführen.

  • Zeigen Sie die XML-Dateien in einem Webbrowser an, um nach Analysefehlern zu suchen.

  • Verwenden Sie im Menü Edit (Bearbeiten) den Befehl Paste as HTML (Als HTML einfügen), wenn Sie Beispiele aus diesem Whitepaper in XML-Dateien in Visual Studio kopieren und einfügen möchten. Wenn Sie den Befehl Paste (Einfügen) verwenden, fügt der XML-Designer möglicherweise Code hinzu, der nicht dem Schema der Startseite entspricht.

  • Schließen Sie Visual Studio, und starten Sie das Programm neu. Der von einer serverseitigen XML-Datei bereitgestellte Registerkarteninhalt wird unter Umständen nicht auf der Startseite aktualisiert, wenn Sie die Option Refresh (Aktualisieren) verwenden.

Sie können auch eine HTML-Überprüfungsdatei erstellen, mithilfe derer Sie Ihren XML-Code überprüfen und Fehler aufdecken können.

Erstellen einer einfachen XML-Überprüfungsdatei
Mit dem folgenden Verfahren erstellen Sie eine HTML-Datei, die Skript zur Überprüfung des XML-Codes enthält, der im benutzerdefinierten Inhalt der Startseite verwendet wird. Um dieses Überprüfungsskript zu verwenden, müssen Sie mit dem Internet verbunden sein.

So verwenden Sie eine einfache XML-Überprüfungsdatei

  1. Kopieren Sie den folgenden Code, und fügen Sie diesen in einen Text-Editor wie etwa den Visual Studio Code-Editor oder den Microsoft Editor ein.

     <html>  
     <head>  
     <title>Start Page Content Validation Tool</title>  
     <meta name="vs_targetSchema" content="<A href="
    https://schemas.microsoft.com/intellisense/ie5">
    https://schemas.microsoft.com/intellisense/ie5</A>">  
     <script id="clientEventHandlersJS" language="javascript">  
     <!--  
     //Global variables  
     var g_MSXML_DOM = "MSXML2.DOMDocument.3.0";  
     var g_MSXML_Schema_DOM = "MSXML2.XMLSchemaCache.3.0";  
     var g_valError;  
     var g_valSchema = new ActiveXObject(g_MSXML_Schema_DOM);  
     //This function validates the tab xml  
     function fnLoadAndValidate(oTab, xmlobj)  
     {  
     //Set list of errors to ""  
     g_valError = "";  
     try {  
     //Checks that xml passes schema validation  
     try {  
     xmlobj.validateOnParse = true;  
     xmlobj.schemas = g_valSchema;  
     xmlobj.loadXML(oTab.xml);  
     if (xmlobj.parseError != 0) {  
     g_valError = "Content validation error: " + xmlobj.parseError.reason;  
     return false;  
     }  
     } catch (e) {  
     g_valError = "XML parse or validation error: " + e.message;  
     return false;  
     }  
     } catch (e) {  
     g_valError = "General validation error: " + e.message;  
     return false;  
     }  
     return true;  
     }  
     //This function is called when the "Validate" button   
     //is clicked (after loading a tab definition file) and validates   
     //all tabs found in the definition file  
     function validateTab(tabFile) {  
     var xmlTmp = new ActiveXObject(g_MSXML_DOM);  
     var errorList = "";  
     //Load file specified in file field on page  
     xmlTmp.load(SelectFile.value);  
     //Finds all tabs in the file  
     var tabList = xmlTmp.selectNodes("//Tab");  
     //For each tab, validates xml against the schema  
     for(var o = 0; o!=tabList.length;o++)  
     {  
     objNode = tabList.nextNode();  
     tabName = objNode.getAttribute("Name");  
     //If the tab fails validation, add an error to list of errors  
     if(!fnLoadAndValidate(objNode, xmlTmp))  
     errorList += "Tab : " + tabName + "\n" + g_valError +"\n";  
     }  
     //If errors were found, prompt with list, otherwise prompt with success  
     if(errorList!="")  
     alert("Validation errors found\n\n" + errorList);  
     else  
     alert("No validation errors found.");  
     }  
     //On window load, opens the schema validation file (vstab.xdr)  
     //NOTE: Content validation requires an active Internet connection.  
     function window_onload() {  
     try {  
     g_valSchema.add("", "<A href="
    https://msdn.microsoft.com/vsdata/xdr/vstab_2003.xdr">
    https://msdn.microsoft.com/vsdata/xdr/vstab_2003.xdr</A>");  
     RenderInput.style.display = "inline";  
     } catch (e) {  
     RenderError.innerHTML = "Error accessing schema file (vstab.xdr).   
     If problem persists, contact Administrator.<p/>NOTE: content validation   
     requires an active internet connection.";  
     }  
     }  
     //-->  
     </script>  
     </head>  
     <body language="javascript" onload="return window_onload()">  
     <span>Start Page Content Validation Tool</span>  
     <hr>  
     <div ID="RenderInput" style="DISPLAY: none">  
     Content definition file:  
     <BR>  
     <INPUT ID="SelectFile" type="file" size="60">  
     <INPUT ID="Validate" style="height: 20" type="button"   
     value="Validate" onclick="validateTab()">  
     </div>  
     <div ID="RenderError"></div>  
     </body>  
    </html>
    
  2. Speichern Sie die Datei als HTM-Seite.

  3. Öffnen Sie in einem Webbrowser die HTM-Seite.

  4. Klicken Sie auf der Überprüfungsseite auf Browse (Durchsuchen), um die zu überprüfende XML-Datei zu suchen.

  5. Klicken Sie auf Validate (Überprüfen).

Die Überprüfungsdatei untersucht, ob der XML-Code korrekt in der Datei formatiert ist, ob die erforderlichen Attribute für die entsprechenden Elemente vorhanden sind und ob Elemente korrekt verwendet werden.

Bereitstellen von benutzerdefiniertem Inhalt auf der Startseite

Der Inhalt von benutzerdefinierten Registerkarten wird durch Registerkarten-Definitionsdateien auf dem Client und Server bereitgestellt. Benutzerdefinierte Registerkarten-Definitionsdateien auf dem Client müssen an einem spezifischen Speicherort auf dem Computer gespeichert werden, damit die Startseite die Dateien erkennt. URLs in diesen Dateien können auf Inhalt zeigen, der von einem Server zurückgegeben wird.

Wenn der Inhalt häufig aktualisiert werden soll, sollte ein serverseitiger Feed verwendet werden. Der Inhalt auf dem Server kann aktualisiert werden, ohne dass der Client beeinträchtigt wird. Auf diese Weise kann Inhalt regelmäßig für mehrere Computer von einer Quelle aus bereitgestellt werden. Die Registerkarten Online Community (Onlinecommunity), Headlines und Downloads auf der Startseite sind auf diese Weise definiert. Wenn der Inhalt nicht so häufig oder nie aktualisiert wird, ist nur eine clientseitige Registerkarten-Definitionsdatei erforderlich. Ein Beispiel für eine solche Registerkarte ist Get Started (Erste Schritte) auf der Startseite.

Registerkarten-Definitionsdateien können auch mit gebietsschemaspezifischem Inhalt bereitgestellt werden, wodurch die Möglichkeit besteht, benutzerdefinierte Registerkarten in mehreren Sprachen auf der Grundlage der Ländereinstellungen eines Computers anzuzeigen.

Wenn die Startseite angezeigt wird, werden bestimmte Speicherorte auf dem Computer nach benutzerdefinierten Registerkarten durchsucht. Falls an diesen Speicherorten Registerkarten-Definitionsdateien gefunden werden, wird der Inhalt dieser Dateien auf der Startseite angezeigt. Wenn eine Registerkarte ausgewählt wird, wird der Clientinhalt ausgegeben. Falls ein Serverfeed definiert ist, wird der Serverinhalt gedownloadet. Dieser ersetzt den Inhalt des Clients und wird auf der Startseite angezeigt.

So stellen Sie benutzerdefinierte Registerkarten auf dem Client bereit

  1. Navigieren Sie zum Verzeichnis <Visual Studio-Installationspfad>\Common7\IDE\HTML\Custom\. Erstellen Sie das Verzeichnis Custom, falls es noch nicht vorhanden ist.

  2. Kopieren Sie die Registerkarten-Definitionsdateien (*.xml) in das Verzeichnis.

  3. Starten Sie Visual Studio .NET, und zeigen Sie den Bereich Online Resources (Onlineressourcen) der Startseite an. Benutzerdefinierte Registerkarten werden im unteren Teil der Registerkartenliste angezeigt.

Wenn Ihre benutzerdefinierten Registerkarten nicht angezeigt werden, ist der XML-Code möglicherweise fehlerhaft. Weitere Informationen hierzu finden Sie im Abschnitt Testen und Problembehandlung des Startseiteninhalts.

So stellen Sie benutzerdefinierte Registerkarten für ein bestimmtes Gebietsschema auf dem Client bereit

  1. Navigieren Sie zum Verzeichnis <Visual Studio-Installationspfad>\Common7\IDE\HTML\<Gebietsschema-ID>\Custom\. Erstellen Sie das Verzeichnis \...\<Gebietsschema-ID>\Custom\, falls es noch nicht vorhanden ist.
    Beispiel: c:\Programme\Visual Studio .NET\Common7\IDE\HTML\1031\Custom\ für Deutsch.

    Sprache

    Gebietsschema-ID

    Chinesisch (traditionell)

    1028

    Deutsch

    1031

    Englisch

    1033

    Französisch

    1036

    Italienisch

    1040

    Japanisch

    1041

    Koreanisch

    1042

    Chinesisch (vereinfacht)

    2052

    Spanisch

    3082

  2. Kopieren Sie die Registerkarten-Definitionsdateien (*.xml) in die Verzeichnisse der entsprechenden Gebietsschemas.

Inhalt, der von einem Server aktualisiert werden soll, enthält zwei Teile: die clientseitige Registerkarten-Definitionsdatei mit einem Zeiger auf den entsprechenden Server und serverseitige Dateien, die den XML-Code ausgeben und überprüfen, ob der XML-Code dem Schema der Startseite entspricht. Bei diesen Dateien kann es sich um einfache, auf einem Webserver bereitgestellte XML-Dateien, vollständige .NET-Anwendungen oder sogar um einen XML Web Service auf einem Server handeln, der XML zurückgibt. Sie können z.B. eine ASP-Datei verwenden, die auf eine XML-Registerkarten-Definitionsdatei zeigt, wie in Beispiel 4.

So stellen Sie dynamischen Inhalt auf dem Server bereit

  1. Fügen Sie im <Feed>-Abschnitt der Client-Registerkarten-Definitionsdatei einen Zeiger ein, der auf den Server, Anwendungspfad oder die Ausgabedatei verweist.

  2. Navigieren Sie zum Verzeichnis <Visual Studio-Installationspfad>\Common7\IDE\HTML\Custom\. Erstellen Sie das Verzeichnis Custom, falls es noch nicht vorhanden ist.

  3. Kopieren Sie die Registerkarten-Definitionsdateien (*.xml) in das Verzeichnis.

  4. Stellen Sie sicher, dass die serverseitigen Dateien auf dem Server vorhanden sind.

Erweiterte Elemente

Die neuen Elemente in Visual Studio .NET 2003 bieten Ihnen jetzt größere Flexibilität bei der Definition benutzerdefinierter Registerkarten. Mit diesen neuen Elementen können Sie über Registerkarten der Startseite direkt mit Visual Studio-Add-Ins interagieren.

Die folgende Tabelle enthält die erweiterten Elemente, die in diesem Abschnitt behandelt werden.

<AddInWorker>

<Action>

<InvokeMethod>

<RenderArgs>

<RenderArg>

<RenderInput>

<AddInWorker></AddInWorker>
Optional. Dient zur Herstellung einer Verbindung mit einem Visual Studio-Add-In, das in Visual Studio geladen ist. Übergeordnetes Element von <RenderArgs> und <RenderInput>. Dieses Element enthält die Attribute ID, ActionID, RenderAreaID, ProgID, Method und ErrorMessage.

Weitere Informationen zur Erstellung von Add-Ins finden Sie im Thema "Erstellen von Add-Ins und Assistenten" auf der MSDN-Website unter folgender Adresse: https://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsintro7/html/vxconcreatingautomationobjects.asp.

<Action></Action>
Optional. Dient zum Aufrufen eines Add-Ins und ist das übergeordnete Element von <InvokeMethod>. Dieses Element enthält das ID-Attribut.

<InvokeMethod></InvokeMethod>
Optional. Dient zum Aufrufen eines Visual Studio-Add-Ins oder einer Website. Dieses Element enthält das ToolID-Attribut.

<RenderArgs></RenderArgs>
Optional. Liste der Argumente, die an das Visual Studio-Add-In übergeben werden, und übergeordnetes Element von <RenderArg>. Dieses Element enthält die Attribute ID und ItemProp.

<RenderArg></RenderArg>
Optional. Argument, das an die Methode eines Visual Studio-Add-Ins übergeben wird.

<RenderInput></RenderInput>
Optional. Liste der Elemente, die für die Interaktion mit einem Visual Studio-Add-In verwendet werden. Gültig sind alle in der dokumentierten Gruppe von Benutzeroberflächenelementen enthaltenen Elemente, die innerhalb des Schemas definiert sind.
"ID"-Attribut
Erforderlich. Eine eindeutige ID für das Element.
"ItemID"-Attribut
Erforderlich. ID eines benutzerdefinierten Registerkartenelements zur Erstellung eines Arguments, das an die Methode eines Visual Studio-Add-Ins übergeben wird.
"ItemProp"-Attribut
Optional. Attribut eines benutzerdefinierten Registerkartenelements, das vom ItemID-Attribut referenziert wird, zur Erstellung eines Arguments, das an die Methode eines Visual Studio-Add-Ins übergeben wird. Ohne Angabe dieses Attributs wird das Element selbst an die Add-In-Methode übergeben, was dem Add-In eine direkte Interaktion mit einem Element auf einer benutzerdefinierten Registerkarte ermöglicht.
"ToolID"-Attribut
Erforderlich. Die ID des Visual Studio-Add-Ins. Das ActionID-Attribut verwendet den Wert dieses Attributs.
"ActionID"-Attribut
Erforderlich. Die ID der Aktion des Visual Studio-Add-Ins, die vom ToolID-Attribut des <InvokeMethod>-Elements bereitgestellt wird.
"ProgID"-Attribut
Erforderlich. Die Programmkennung des Visual Studio-Add-Ins.
"Method"-Attribut
Erforderlich. Die Methode des Visual Studio-Add-Ins, die bei Aufrufen des Add-Ins aufgerufen wird.
"ExecuteOnRender"-Attribut
Erforderlich. Gibt an, ob die Methode des Visual Studio-Add-Ins bei Ausgabe der Registerkarte aufgerufen wird. Verwenden Sie die Werte TRUE oder FALSE.
"RenderAreaID"-Attribute
Erforderlich. ID des Elements, das zur Ausgabe der Ergebnisse verwendet wird, die von dem Visual Studio-Add-In zurückgegeben werden.
"<AddInWorker>"-Beispiel
Der folgende Code ist ein Beispiel einer einfachen Registerkarten-Definitionsdatei, die zum Aufrufen eines Visual Studio-Add-Ins und zur Ausgabe der Ergebnisse in einer Tabellenzelle verwendet wird.

<TabDefinition> 
   <Tab ID="vs_AddInWorkerTab" Name="Add-in Worker" Filterable="false"> 
   <Application ID="VSAddInWorkerTab"> 
   <Action ID="MyAddInInvoke"> 
   <InvokeMethod ToolID="MyAddInInvoke" /> 
   </Action> 
   <Pane ID="MyAddInPane" Title="My Add-In"> 
   <Break/> 
   <TextSpan>Text to pass to add-in:</TextSpan> 
   <Break/> 
   <AddInWorker ID="MyAddIn" ActionID="MyAddInInvoke" 
   RenderAreaID="RenderMyAddInXML" ProgID="MySPAddin.Connect" 
   Method="HelloWorld" ExecuteOnRender="false"> 
   <RenderArgs> 
   <RenderArg ItemID="MyAddInField" ItemProp="value" /> 
   </RenderArgs> 
   <RenderInput> 
   <TextField ID="MyAddInField"></TextField> 
   <Button Text="Go" AccessKey="G" OnClick="MyAddInInvoke"></Button> 
   </RenderInput> 
   </AddInWorker> 
   <Table ID="RenderMyAddInTable"> 
   <TableRow> 
   <TableCell ID="RenderMyAddInXML"></TableCell> 
   </TableRow> 
   </Table> 
   </Pane> 
   </Application> 
   </Tab> 
</TabDefinition>

Der folgende Code zeigt die Methode des Visual Studio-Add-Ins, die vom AddInWorker-Element weiter oben aufgerufen wird.

public string HelloWorld(string MyAddInArg) 
{ 
   string returnXML; 
   returnXML = "<TextSpan>AddInWorker received: " + MyAddInArg + "</TextSpan>"; 
   return returnXML; 
}

Schlussfolgerung

Wie in diesem Whitepaper dargestellt wurde, können Sie benutzerdefinierten Inhalt zur Visual Studio-Startseite hinzufügen und diesen Inhalt für mehrere Computer bereitstellen. Der Inhalt kann statisch sein, oder Sie stellen dynamischen Inhalt zur Verfügung, der in Dateien auf einem Server gespeichert ist. Unabhängig davon, für welche Methode Sie sich entscheiden, stellt das Anpassen der Startseite eine Möglichkeit dar, die IDE auf Ihre Anforderungen bzw. auf die Anforderungen Ihres Unternehmens abzustimmen.

Weitere Informationen hierzu finden Sie unter "Startseite" auf der MSDN-Website.

Beispiele für benutzerdefinierten Inhalt

Es folgen einige Beispiele, in denen Möglichkeiten zum Anpassen der Visual Studio-Startseite aufgezeigt werden. Verwenden Sie im Menü Edit (Bearbeiten) den Befehl Paste as HTML (Als HTML einfügen), wenn Sie den Beispielcode in XML-Dateien in Visual Studio kopieren und einfügen möchten. Weitere Informationen zum Anzeigen dieser Beispiele auf der Startseite finden Sie im Abschnitt Bereitstellen von benutzerdefiniertem Inhalt auf der Startseite.

Die Beispiele 1, 2 und 3 können bereitgestellt und angezeigt werden, ohne dass Änderungen am vorhandenen XML-Code vorgenommen werden müssen. In Beispiel 4 muss der bereitgestellte XML-Code geändert werden. Das Beispiel enthält kommentierte Anweisungen zu den Änderungen, die zum Anzeigen der Registerkarte erforderlich sind.

Zu erstellendes Element

Abschnitt

Eine einzelne Registerkarte mit statischen Hyperlinks, die beschreibenden Text und Grafiken enthält.

Beispiel 1: Einfache Registerkarte

Eine einfache Registerkarte mit drei untergeordneten Registerkarten mit Inhalten, die jeweils Hyperlinks enthalten.

Beispiel 2: Registerkarte mit mehreren Bereichen

Eine einzelne Registerkarte mit statischen Hyperlinks, die beschreibenden Text und Grafiken enthält.

Beispiel 3: Registerkarte mit statischem Inhalt

Eine einzelne Registerkarte mit Hyperlinks, Grafiken und Text, die Inhalte über eine Registerkarten-Definitionsdatei auf dem Server bezieht.

Beispiel 4: Registerkarte mit Live-Inhalt

Beispiel 1: Einfache Registerkarte
Dieses Beispiel zeigt eine einfache Registerkarte mit statischen Hyperlinks. Zwei Hyperlinks enthalten beschreibenden Text und verbundene Grafiken, für die anderen beiden gilt dies nicht.

Abbildung 2

Abbildung 2

Einfache Registerkarte Der zum Erstellen dieses Beispiels verwendete XML-Code ist unten aufgeführt:

<?xml version="1.0" encoding="UTF-8" ?> 
<TabDefinition> 
   <Tab ID="simple_tab" Name="Example 1: Simple Tab" Filterable="false"> 
   <Application ID="Simple_App"> 
   <Pane ID="Main_Pane"> 
   <TextSpan ID="Tab_Description" FontSize="16">Example 1--A  
Simple Custom Tab</TextSpan><Break/> 
   <Break/> 
   <TextSpan ID="disclaimer">Note:  The contents and the code for  
this sample tab originated as part of the white paper "Customizing the  
Visual Studio Start Page" and are not supported by Microsoft Product  
Support Services.</TextSpan> 
   <Break/> 
   <HRule/> 
   <LinkGroupSet> 
   <LinkGroup ID="WebSites" Title="Hyperlinks with graphics  
and text"/> 
   <LinkGroup ID="SearchEngines" Title="Simple hyperlink  
list"/> 
   </LinkGroupSet> 
   </Pane> 
   <Data> 
   <Context> 
   <Links> 
   <LItemEx> 
   <LItem ID="LI1" LinkGroup="WebSites"  
Image="<A href="https://www.microsoft.com/library/homepage/images/mslogo-blue.gif">
https://www.microsoft.com/library/homepage/images/mslogo-blue.gif</A>"  
URL="<A href="https://www.microsoft.com">http://www.microsoft.com</A>">Microsoft</LItem> 
   <Blurb>Microsoft Home Page</Blurb> 
   </LItemEx> 
   <LItemEx> 
   <LItem ID="LI2" LinkGroup="WebSites"  
Image="<A href="
https://msdn.microsoft.com/library/shared/toolbar/graphics/banners/">
https://msdn.microsoft.com/library/shared/toolbar/graphics/banners/</A> 
MSDN_banner.gif" URL="<A href="
https://msdn.microsoft.com">
http://msdn.microsoft.com</A>">MSDN</LItem> 
   <Blurb>Microsoft Developer Network</Blurb> 
   </LItemEx> 
   <LItemEx> 
   <LItem ID="LI3" LinkGroup="SearchEngines"  
URL="<A href="http://search.microsoft.com">
http://search.microsoft.com</A>">Search Microsoft</LItem> 
   </LItemEx> 
   <LItemEx> 
   <LItem ID="LI4" LinkGroup="SearchEngines"  
URL="<A href="http://search.microsoft.com/advanced_search.asp?siteid=us/dev">
http://search.microsoft.com/advanced_search.asp?siteid=us/dev</A>">Search  
MSDN</LItem> 
   </LItemEx> 
   </Links> 
   </Context> 
   </Data> 
   </Application> 
   </Tab> 
</TabDefinition>

Beispiel 2: Registerkarte mit mehreren Bereichen

Dieses Beispiel zeigt eine einfache Registerkarte, die drei Bereiche mit Inhalt enthält: Sites, Search und Other. Jeder Bereich enthält Hyperlinks.

Abbildung 3

Abbildung 3

Benutzerdefinierte Registerkarte mit mehreren Bereichen Der zum Erstellen dieses Beispiels verwendete XML-Code ist unten aufgeführt:

<?xml version="1.0" encoding="UTF-8" ?> 
<TabDefinition> 
   <Tab ID="tabbed_tab" Name="Example 2: Multi-Paned Tab"  
Filterable="false"> 
   <Application ID="Tabbed_App"> 
   <PaneSet ID="Main_PaneSet"> 
   <Pane ID="Sites_Pane" Title="Sites"> 
   <TextSpan ID="SitesTab_Description" FontSize="16">Example  
2--A Multi-Paned Custom Tab</TextSpan><Break/> 
   <Break/> 
   <TextSpan ID="disclaimer">Note:  The contents and the code for  
this sample tab originated as part of the white paper "Customizing the  
Visual Studio Start Page" and are not supported by Microsoft Product  
Support Services.</TextSpan> 
   <Break/> 
   <LinkGroup ID="WebSites" Title="Hyperlinks with graphics  
and text"/> 
   </Pane> 
   <Pane ID="Search_Pane" Title="Search"> 
   <TextSpan ID="SearchTab_Description" FontSize="16">Example  
2--A Multi-paned custom tab.</TextSpan><Break/> 
   <LinkGroup ID="SearchEngines" Title="Simple hyperlink  
list"/> 
   </Pane> 
   <Pane ID="Other_Pane" Title="Other"> 
   <TextSpan ID="Tab_Description" FontSize="16">Example 2--A  
Multi-paned custom tab</TextSpan><Break/> 
   <LinkGroup ID="OtherSites" Title="Simple hyperlink list"/> 
   </Pane> 
   </PaneSet> 
   <Data> 
   <Context> 
   <Links> 
   <LItemEx> 
   <LItem ID="LI1" LinkGroup="WebSites"  
Image="<A href="https://www.microsoft.com/library/homepage/images/mslogo-blue.gif">
https://www.microsoft.com/library/homepage/images/mslogo-blue.gif</A>"  
URL="<A href="https://www.microsoft.com">
http://www.microsoft.com</A>">Microsoft</LItem> 
   <Blurb>Microsoft Home Page</Blurb> 
   </LItemEx> 
   <LItemEx> 
   <LItem ID="LI2" LinkGroup="WebSites"  
Image="<A href="https://msdn.microsoft.com/library/shared/toolbar/graphics/banners/">
https://msdn.microsoft.com/library/shared/toolbar/graphics/banners/</A> 
MSDN_banner.gif" URL="<A href="https://msdn.microsoft.com">
http://msdn.microsoft.com</A>">MSDN</LItem> 
   <Blurb>Microsoft Developer Network</Blurb> 
   </LItemEx> 
   <LItemEx> 
   <LItem ID="LI3" LinkGroup="SearchEngines"  
URL="<A href="http://search.microsoft.com">
http://search.microsoft.com</A>">Search Microsoft</LItem> 
   </LItemEx> 
   <LItemEx> 
   <LItem ID="LI4" LinkGroup="SearchEngines"  
URL="<A href="http://search.microsoft.com/advanced_search.asp?siteid=us/dev">
http://search.microsoft.com/advanced_search.asp?siteid=us/dev</A>">Search 
MSDN</LItem> 
   </LItemEx> 
   <LItemEx> 
   <LItem ID="LI5" LinkGroup="OtherSites"  
URL="<A href="https://www.gotdotnet.com">
http://www.gotdotnet.com</A>">GotDotNet</LItem> 
   </LItemEx> 
   <LItemEx> 
   <LItem ID="LI6" LinkGroup="OtherSites"  
URL="<A href="https://msn.com">http://msn.com</A>">MSN</LItem> 
   </LItemEx> 
   </Links> 
   </Context> 
   </Data> 
   </Application> 
   </Tab> 
</TabDefinition>

Beispiel 3: Registerkarte mit statischem Inhalt
Dieses Beispiel zeigt eine einfache Registerkarte mit statischen Hyperlinks. Zwei Hyperlinks enthalten beschreibenden Text und verbundene Grafiken, für die anderen beiden gilt dies nicht.

Abbildung 4

Abbildung 4

Registerkarte mit statischem Inhalt Der zum Erstellen dieses Beispiels verwendete XML-Code ist unten aufgeführt:

<?xml version="1.0" encoding="UTF-8" ?> 
<TabDefinition> 
   <Tab ID="static_tab" Name="Example 3: Tab with Static Content" 
Filterable="false"> 
   <Application ID="Static_App"> 
   <Pane ID="Main_Pane"> 
   <TextSpan ID="Tab_Description" FontSize="16">Example 3--Tab 
 with Static Content</TextSpan><Break/> 
   <Break/> 
   <TextSpan ID="disclaimer">Note:  The contents and the  
code for this sample tab originated as part of the white paper  
"Customizing the Visual Studio Start Page" and are not supported 
by Microsoft Product Support Services.</TextSpan> 
   <Break/> 
   <LItemEx> 
   <LItem ID="LI1" LinkGroup="WebSites"  
Image="<A href="https://www.microsoft.com/library/homepage/images/">
https://www.microsoft.com/library/homepage/images/</A> 
mslogo-blue.gif" URL="<A href="
https://www.microsoft.com">
http://www.microsoft.com</A>">Microsoft</LItem> 
   <Blurb>Microsoft Home Page</Blurb> 
   </LItemEx> 
   <LItemEx> 
   <LItem ID="LI2" LinkGroup="WebSites"  
Image="<A href="https://msdn.microsoft.com/library/shared/toolbar/">
https://msdn.microsoft.com/library/shared/toolbar/</A> 
graphics/banners/MSDN_banner.gif"  
URL="<A href="https://msdn.microsoft.com">
http://msdn.microsoft.com</A>">MSDN</LItem> 
   <Blurb>Microsoft Developer Network</Blurb> 
   </LItemEx> 
   <HRule/> 
   <LItemEx> 
   <LItem ID="LI3" LinkGroup="SearchEngines"  
URL="<A href="http://search.microsoft.com">
http://search.microsoft.com</A>">Search Microsoft</LItem> 
   </LItemEx> 
   <LItemEx> 
   <LItem ID="LI4" LinkGroup="SearchEngines"  
URL="<A href="http://search.microsoft.com/advanced_search.asp?siteid=us/dev">
http://search.microsoft.com/advanced_search.asp?siteid=us/dev</A>"> 
Search MSDN</LItem> 
   </LItemEx> 
   <HRule/> 
   </Pane> 
   </Application> 
   </Tab> 
</TabDefinition>

Beispiel 4: Registerkarte mit Live-Inhalt
Dieses Beispiel zeigt eine einfache Registerkarte mit Hyperlinks, Grafiken und Text. Der Inhalt dieser Registerkarte wird durch eine Registerkarten-Definitionsdatei auf dem Server bereitgestellt. Inhalt, der von einem Server aktualisiert werden soll, enthält zwei Teile: die clientseitige Registerkarten-Definitionsdatei mit einem Zeiger auf den entsprechenden Server und serverseitige Dateien, die den XML-Code ausgeben und überprüfen, ob der XML-Code dem Schema der Startseite entspricht.

Abbildung 5

Abbildung 5. Registerkarte mit Live-Inhalt

Wenn Sie den Inhalt dieses Beispiels anzeigen möchten, müssen Sie drei Dateien erstellen: eine Registerkarten-Definitionsdatei für den Client (example4.xml), eine Registerkarten-Definitionsdatei für den Server (serverFeed.xml) und eine ASP-Feeddatei für den Server (serverFeed.asp), die auch den XML-Code überprüft. Zudem muss example4.xml geändert werden, so dass die Datei auf den Webserver zeigt, auf dem serverFeed.asp und serverFeed.xml gespeichert sind.

Inhalt der clientseitigen Registerkarten-Definitionsdatei: "example4.xml"
Dieser XML-Code auf dem Client verweist auf die ASP-Datei serverFeed.asp, die auf einem Webserver gespeichert sein muss, auf den im XML-Code als http://www.test-1.msn.com verwiesen wird. Falls der Server nicht verfügbar ist, wird auf der Registerkarte der Text "Unable to load content from the server" angezeigt.

<?xml version="1.0" encoding="UTF-8" ?> 
<TabDefinition> 
   <Tab ID="live_tab" Name="Example 4: Tab with Live Content"  
Filterable="true"> 
   <Application ID="Live_App"> 
   <Pane ID="Main_Pane"> 
   <Break/> 
   <TextSpan ID="Tab_Description">Unable to load content from the  
server.</TextSpan> 
   </Pane> 
   </Application> 
   <Feeds> 
   <Feed> 
   <!--Replace "<A href="http://www.test-1.msn.com/serverFeed.asp">
http://www.test-1.msn.com/serverFeed.asp</A>" in the  
<Source> element below with the path to where the server .asp file is  
located.--> 
   <Source LCID="1033" URL="<A href="
http://www.test-1.msn.com/">http://www.test-1.msn.com/</A> 
serverFeed.asp"> 
   <Arg Name="feedName">defaultFeed</Arg> 
   </Source> 
   </Feed> 
   </Feeds> 
   </Tab> 
</TabDefinition>

Inhalt der serverseitigen Registerkarten-Definitionsdatei: "serverFeed.xml"
Dieses Beispiel für Server-XML-Code muss im Stammverzeichnis des Hostwebservers als serverFeed.xml gespeichert werden. Wenn die Registerkarten-Definitionsdatei auf dem Client serverFeed.asp aufruft, zeigt die ASP-Datei auf serverFeed.xml.

<?xml version="1.0" encoding="UTF-8" ?> 
<TabDefinition> 
   <Tab ID="live_tab" Name="Live" Filterable="true"> 
   <Application ID="Live_App"> 
   <Pane ID="Main_Pane"> 
   <Break/> 
   <TextSpan ID="Tab_Description" FontSize="16"> Example 4--A Tab  
with Live Content</TextSpan> <Break/> 
   <Break/> 
   <TextSpan ID="disclaimer">Note:  The contents and the code for  
this sample tab originated as part of the white paper "Customizing the  
Visual Studio Start Page" and are not supported by Microsoft Product  
Support Services.</TextSpan> 
   <Break/> 
   <HRule/> 
   <LinkGroupSet> 
   <LinkGroup ID="WebSites" Title="Hyperlinks with graphics  
and text"/> 
   <LinkGroup ID="SearchEngines" Title="Simple hyperlink  
list"/> 
   </LinkGroupSet> 
   </Pane> 
   <Data> 
   <Context> 
   <Links> 
   <LItemEx> 
   <LItem ID="LI1" LinkGroup="WebSites"  
Image="<A href="https://www.microsoft.com/library/homepage/images/mslogo-blue.gif">
https://www.microsoft.com/library/homepage/images/mslogo-blue.gif</A>"  
URL="<A href="https://www.microsoft.com">http://www.microsoft.com</A>">Microsoft</LItem> 
   <Blurb>Microsoft Home Page</Blurb> 
   </LItemEx> 
   <LItemEx> 
   <LItem ID="LI2" LinkGroup="WebSites"  
Image="<A href="https://msdn.microsoft.com/library/shared/toolbar/graphics/banners/">
https://msdn.microsoft.com/library/shared/toolbar/graphics/banners/</A> 
MSDN_banner.gif" URL="<A href="https://msdn.microsoft.com">
http://msdn.microsoft.com</A>">MSDN</LItem> 
   <Blurb>Microsoft Developer Network</Blurb> 
   </LItemEx> 
   <LItemEx> 
   <LItem ID="LI3" LinkGroup="SearchEngines"  
URL="<A href="http://search.microsoft.com">http://search.microsoft.com</A>">Search Microsoft</LItem> 
   </LItemEx> 
   <LItemEx> 
   <LItem ID="LI4" LinkGroup="SearchEngines"  
URL="<A href="http://search.microsoft.com/advanced_search.asp?siteid=us/dev">
http://search.microsoft.com/advanced_search.asp?siteid=us/dev</A>">Search  
MSDN</LItem> 
   </LItemEx> 
   </Links> 
   </Context> 
   </Data> 
   </Application> 
   </Tab> 
</TabDefinition>

Serverseitiger ASP-Inhalt: "serverFeed.asp"
Das VBScript unten gibt an, dass die Registerkarte der Startseite die Datei serverFeed.xml als Inhalt verwendet. Durch den ASP-Code ist sichergestellt, dass gültiger XML-Code an die Startseite zurückgegeben wird. Diese Datei muss im Stammverzeichnis des Hostwebservers als serverFeed.asp gespeichert werden.

<% @ CODEPAGE="65001" LANGUAGE="VBScript" %> 
<% IF (Request.QueryString("feedName") = "defaultFeed") THEN 
Response.ContentType = "Text/XML" 
Response.Redirect "serverFeed.xml" 
END IF 
%> 
<!--This function ensures that URLs returned to the client are safe for  
use with the Start Page.--> 
function replaceBadURLs(xpath, xmlDocument)  
{ 
   var i = 0; 
   var regex = "^http:|^https:|^news:|^ms-help:|^vs:"; 
   var nodes = xmlDocument.selectNodes(xpath); 
   for(i = 0 ; i < nodes.length ; i++) 
   { 
   if(!nodes.item(i).text.match(regex)) 
   { 
   nodes.item(i).text = ""; 
   } 
   } 
}