Anpassen der Visual Studio-Startseite

Visual Studio .NET 2003
Veröffentlicht: 07. Apr 2002 | Aktualisiert : 21. Jun 2004
Von Elizabeth Murray

Dieser Artikel liefert einen umfassenden Überblick über den Aufbau der Startseite von Microsoft® Visual Studio® .NET. Darüber hinaus wird beschrieben, wie Sie die Startseite durch Hinzufügen von neuem Inhalt anpassen können. Der Artikel enthält vier Beispiele und XML-Code, der zum Definieren des Inhalts verwendet wird. Zudem wird der Prozess des Abrufens und Anzeigens von Informationen zur Startseite erläutert. Nachdem Sie diesen Artikel gelesen haben, können Sie eigenen benutzerdefinierten Inhalt erstellen und auf der Visual Studio-Startseite anzeigen.

Auf dieser Seite

Einführung Einführung
Funktionsweise der Startseite Funktionsweise der Startseite
Hinzufügen von benutzerdefiniertem Inhalt zur Startseite Hinzufügen von benutzerdefiniertem Inhalt zur Startseite
Beispiele für benutzerdefinierten Inhalt Beispiele für benutzerdefinierten Inhalt
Testen und Problembehandlung des Startseiteninhalts Testen und Problembehandlung des Startseiteninhalts
Bereitstellen von benutzerdefiniertem Inhalt auf der Startseite Bereitstellen von benutzerdefiniertem Inhalt auf der Startseite
Schlussfolgerung Schlussfolgerung

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, unterstützt Sie beim Erstellen neuer Lösungen und fördert die Interaktion mit der Onlinecommunity für Entwickler.
Um den Standardinhalt zu ergänzen, können Sie die Startseite anpassen, indem Sie neuen Inhalt auf so genannten Registerkarten hinzufügen. Der Standardinhalt bleibt erhalten. Sie können zwar neuen Inhalt hinzufügen, es ist jedoch nicht möglich, den vorhandenen Standardinhalt zu ändern. Der neue Inhalt kann entweder dynamisch oder statisch sein. Dynamischer Inhalt wird von einem Server aktualisiert, während statischer Inhalt auf dem Client gespeichert wird.
Dieser Artikel enthält mehrere Beispiele für das Erstellen von neuem Inhalt für die Startseite und für das Hinzufügen dieses Inhalts zu den vorhandenen Registerkarten der Startseite.

Funktionsweise der Startseite

Die Startseite wird im Webbrowser angezeigt, der in der IDE verfügbar ist. Sie besteht aus einer clientseitigen HTM-Seite, in diesem Fall default.htm, die eine Liste von Registerkarten enthält. Diese Registerkarten basieren auf lokal gespeicherten Registerkarten-Definitionsdateien, die mithilfe von XML erstellt wurden.
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 gemäß der Registerkarten-Definitionsdatei statischer Inhalt angezeigt. Siehe Abbildung 1 unten.

Bild01

Abbildung 1


Der gesamte Inhalt wird von der clientseitigen Schemadefinitionsdatei vstab.xdr überprüft, ehe er transformiert und auf der Startseite ausgegeben wird. Nachdem der Inhalt überprüft wurde, wird er mithilfe der clientseitigen Transformierung vshome.xsl 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, 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="<I>Eindeutiger Name</I>" Name="<I>Anzeigename</I>"> 
<Application ID="<I>Eindeutiger Name</I>"> 
   <PaneSet ID="<I>Eindeutiger Name</I>"> 
      <Pane ID="<I>Eindeutiger Name</I>" Title="<I>Anzeigename</I>"> 
         <LinkGroupSet ID="<I>Eindeutiger Name</I>"> 
            <LinkGroup ID="<I>Eindeutiger Name</I>" Title="<I>Anzeigename"</I>> 
         </LinkGroupSet> 
      </Pane> 
   </PaneSet> 
   <Data> 
      <Context> 
         <Links> 
            <LItemEx> 
               <LItem ID="<I>Eindeutiger Name</I>" LinkGroup="<I>LinkGroup-ID</I>" 
 URL="<I>URL-Pfad</I>"> <I>Anzeigetext</I> </LItem> 
            </LItemEx> 
         </Links> 
      </Context> 
   </Data> 
</Application> 
<Feeds> 
   <Feed> 
   <Source LCID="<I>Gebietsschema</I>" URL="<I>URL-Pfad</I>"> 
      <Arg Name="<I>Name</I>"></Arg> 
   </Source> 
   </Feed> 
</Feeds> 
</Tab> 
</TabDefinition>


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 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.

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"> 
         <!--UI-Elemente in diesem Bereich platzieren.--> 
      </Application> 
      <Feeds> 
         <!--Feedelemente in diesem Bereich platzieren--> 
      </Feeds> 
   </Tab> 
   <Tab ID="MyOtherTab" Name="Tab2" Filterable="false"> 
      <Application ID="MyOtherApp"> 
         <!--UI-Elemente in diesem Bereich platzieren.--> 
         <Data> 
            <---Datenelemente in diesem Bereich platzieren--> 
         </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>.

<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="Mein erster Bereich"> 
         <!--UI-Elemente in diesem Bereich platzieren.--> 
      </Pane> 
      <Pane ID="MyPane2" Title="Mein zweiter Bereich"> 
         <!--UI-Elemente in diesem Bereich platzieren.--> 
      </Pane> 
   </PaneSet> 
</Application>


<Pane></Pane>
Optional. Definiert das Anzeigen des Inhalts in einem einzelnen Bereich. Dieses Element enthält die Attribute ID und Title. Eine Gruppe von Bereichen sehen Sie in Beispiel 2. Das folgende XML-Fragment definiert z.B. einen einzelnen Bereich.

<Application ID="MyOhterApp"> 
   <Pane ID="MyPane1" Title="Mein erster Bereich"> 
      <!--UI-Elemente in diesem Bereich platzieren.--> 
   </Pane> 
</Application>


Innerhalb des <Pane>-Elements können 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="http://www.test-1.msn.com/warning.gif"  
Height="40"  
Width="40" AltText="Mein Bild" />


<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">Dies ist ein einfaches <TextSpan>-Element</TextSpan>


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

<TextSpan ID="TextSpanFormatted" FontFamily="Tahoma" FontSize="14">Dies  
ist ein 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= 
   "http://www.test-1.msn.com/warning.gif"  
Height="40" Width="40" AltText="Bild 1 im TextSpan" />Text für Bild 1  
in TextSpan 
   <Image ID="TestSpanImage2" Source= 
"http://www.test-1.msn.com/warning.gif"  
Height="40" Width="40" AltText="Bild 2 im TextSpan" />Text für Bild 2  
in TextSpan 
   <Break/> 
   <Image ID="TestSpanImage3" Source="http://www.test-1.msn.com/ 
warning.gif"  
Height="40" Width="40" AltText="Bild 3 im TextSpan" />Text für Bild 3  
in 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>Dies ist ein Titel.</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="http://www.test-1.msn.com/warning.gif">Hyperlink</Hyperlink>


Dieses XML-Fragment enthält z.B. eine Verknüpfung zu einem Thema in der MSDN-Hilfe.

<Hyperlink ID="TestHyperlink2" Relative="1"  
URL="/ms.msdnvs/vsintro7/HTML/vxoriWhatsNewInVisualStudio.htm"> 
Hyperlink zum Hilfethema</Hyperlink>


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

<LinkGroup ID="LG1" Title="Meine LinkGroup" /> 
   <Data> 
      <Context> 
         <Attributes> 
            <!-- Attribute in diesem Bereich platzieren --> 
         </Attributes> 
         <Links> 
            <LItemEx> 
               <LItem ID="LI1" LinkGroup="LG1" Image="http://www.test- 
1.msn.com/warning.gif">LItem in Meine LinkGroup</LItem> 
               <Blurb>LItem beschreibender Text.</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. 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 Punkten.
"URL"-Attribut
Erforderlich. Ein absoluter Web-URL, der mit http:, https:, news:, ms-help: oder vs: beginnen muss.
"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.

"<Data>"- und "<Feed>"-Elemente für Registerkarten
Das <Data>-Element in der Registerkarten-Definitionsdatei enthält den Inhalt für die Registerkarte. Mithilfe des <Feed>-Elements können Sie statischen Inhalt 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.

<Feeds></Feeds>
Ein untergeordnetes Element von <Tab>, das das Herunterladen von serverseitigem Inhalt für eine Registerkarte definiert.
<Feed></Feed>
Ein untergeordnetes Element des <Feeds>-Elements.
<Source></Source>
Dieses Element zeigt auf Inhalt auf dem Server. Enthält die Attribute LCID und URL.
<Arg></Arg>
Dieses Element übergibt zusätzliche Argumente zusammen mit dem Feed-URL. Es enthält das Name-Attribut. Beispiel:

<Feeds> 
   <Feed> 
      <Source LCID="1033" URL="http://myserver/myfeed.aspx"> 
         <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>

<Data></Data>
Enthält statischen Inhalt, der auf der Registerkarte angezeigt wird.

<Context></Context>
Wird zum Definieren von Gruppen von <LItem>-Elementen verwendet, die gefiltert werden können. Dieses Element enthält die Elemente <Attributes> und <Links>.
<Attributes></Attributes>
Gibt an, ob Inhalt im <Context>-Element mit vordefinierten Hilfefiltern interagiert. Dieses Element enthält das <AItem>-Element.
<AItem></AItem>
Gibt an, ob Inhalt im <Context>-Element mit vordefinierten Hilfefiltern interagiert. Dieses Element enthält die Attribute Name und Value.
<Links></Links>
Optional. Ü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="http://www.test-1.msn.com/warning.gif">LItem mit Text und  
einem Bild.</LItem> 
   <Blurb>LItem beschreibender Text.</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.
"ID"-Attribut
Erforderlich. Eine eindeutige ID für das Element.
"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


"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.
"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="  
http://www.test-1.msn.com/warning.gif" Image="  
http://www.test-1.msn.com/warning.gif  
">Diese Verknüpfung zeigt an, dass der Visual Studio-Filter angewendet wird.</LItem> 
            <Blurb>Die Verknüpfung beschreibender Autotext</Blurb> 
         </LItemEx> 
      </Links> 
   </Context> 
</Data>

Hinzufügen von benutzerdefiniertem Inhalt zur Startseite

Sie können die Startseite anpassen, indem Sie benutzerdefinierte Registerkarten mit statischem oder dynamischem Inhalt 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 der Schemadefinitionsdatei der Startseite (vstab.xdr) entsprechen, sonst wird der Inhalt nicht an die Startseite ausgegeben.

  • Komplexe Benutzeroberflächen und clientseitige Skripts können zurzeit nicht als Inhalt für die Startseite verwendet werden. Nur eine eingeschränkte Gruppe von UI-Elementen ist verfügbar, z.B. Verknüpfungen, Text und Bilder.

  • Die Reihenfolge, in der die Registerkarten auf der Startseite angezeigt werden, kann nicht geändert werden. Standardregisterkarten werden zuerst angezeigt, dann benutzerdefinierte Registerkarten und
    schließlich die Registerkarte Mein Profil.

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

Benutzerdefinierter Inhalt und Sicherheit
Clientseitiger Inhalt ist genauso sicher wie eine Datei, die lokal auf einem Computer gespeichert ist. 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.
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 ASP-Code, der den durch serverFeed.xml zurückgegebenen XML-Code überprüft:

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 = ""; 
      } 
   } 
}


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 der Registerkarten-Definitionsdatei auf zahlreiche Bilder verwiesen wird, die Registerkarten-Definitionsdatei eine große Menge an Inhalt enthält und die Serverleistung sehr niedrig ist, kann dies zu einer langsamen Ausgabe einer Registerkarte führen. Testen Sie stets die Registerkartenleistung, ehe Sie benutzerdefinierte Registerkarten in einer Produktionsumgebung bereitstellen.

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ü Bearbeiten den Befehl 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 .
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.

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.


Bild02

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="Beispiel 1: Einfache benutzerdefinierte Registerkarte" Filterable="false"> 
      <Application ID="Simple_App"> 
         <Pane ID="Main_Pane"> 
            <TextSpan ID="Tab_Description" FontSize="16"> 
Beispiel 1--Eine einfache benutzerdefinierte Registerkarte 
</TextSpan><Break/> 
            <Break/> 
            <TextSpan ID="disclaimer">Anmerkung:  Der Inhalt und Code dieser  
Beispielregisterkarte ist Teil des Whitepaper  
"Anpassen der Visual Studio-Startseite" und wird nicht vom Microsoft-Produktsupport unterstützt.</TextSpan> 
            <Break/> 
            <HRule/> 
            <LinkGroupSet> 
               <LinkGroup ID="WebSites" Title="Hyperlinks mit Grafiken und Text"/> 
               <LinkGroup ID="SearchEngines" Title="Einfache Hyperlinkliste"/> 
            </LinkGroupSet> 
         </Pane> 
         <Data> 
            <Context> 
               <Links> 
                  <LItemEx> 
                     <LItem ID="LI1" LinkGroup="WebSites"  
Image="http://www.microsoft.com/library/homepage/images/mslogo-blue.gif"  
URL="http://www.microsoft.com">Microsoft</LItem> 
                     <Blurb>Microsoft-Homepage</Blurb> 
                  </LItemEx> 
                  <LItemEx> 
                     <LItem ID="LI2" LinkGroup="WebSites"  
Image="http://msdn.microsoft.com/library/shared/toolbar/graphics/banners/ 
MSDN_banner.gif" URL="http://msdn.microsoft.com">MSDN</LItem> 
                     <Blurb>Microsoft Developer Network</Blurb> 
                  </LItemEx> 
                  <LItemEx> 
                     <LItem ID="LI3" LinkGroup="SearchEngines"  
URL="http://search.microsoft.com">Microsoft-Suche</LItem> 
                  </LItemEx> 
                  <LItemEx> 
                     <LItem ID="LI4" LinkGroup="SearchEngines"  
URL="http://search.microsoft.com/advanced_search.asp?siteid=us/dev"> 
MSDN-Suche</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, Suche und Sonstiges. Jeder Bereich enthält Hyperlinks.


Bild03

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="Beispiel 2: Benutzerdefinierte Registerkarte mit mehreren Bereichen"  
Filterable="false"> 
      <Application ID="Tabbed_App"> 
         <PaneSet ID="Main_PaneSet"> 
            <Pane ID="Sites_Pane" Title="Sites"> 
               <TextSpan ID="SitesTab_Description" FontSize="16">Beispiel  
2--Eine benutzerdefinierte Registerkarte mit mehreren Bereichen</TextSpan><Break/> 
               <Break/> 
            <TextSpan ID="disclaimer">Anmerkung:  Der Inhalt und Code dieser  
Beispielregisterkarte ist Teil des Whitepaper "Anpassen der  
Visual Studio-Startseite" und wird nicht vom Microsoft-Produktsupport unterstützt.</TextSpan> 
            <Break/> 
               <LinkGroup ID="WebSites" Title="Hyperlinks mit Grafiken und Text"/> 
            </Pane> 
            <Pane ID="Search_Pane" Title="Suche"> 
               <TextSpan ID="SearchTab_Description" FontSize="16">Beispiel  
2--Benutzerdefinierte Registerkarte mit mehreren Bereichen.</TextSpan><Break/> 
               <LinkGroup ID="SearchEngines" Title="Einfache Hyperlinkliste"/> 
            </Pane> 
            <Pane ID="Other_Pane" Title="Sonstiges"> 
               <TextSpan ID="Tab_Description" FontSize="16">Beispiel  
2--Benutzerdefinierte Registerkarte mit mehreren Bereichen</TextSpan><Break/> 
               <LinkGroup ID="OtherSites" Title="Einfache Hyperlinkliste"/> 
            </Pane> 
         </PaneSet> 
         <Data> 
            <Context> 
               <Links> 
                  <LItemEx> 
                     <LItem ID="LI1" LinkGroup="WebSites"  
Image="http://www.microsoft.com/library/homepage/images/mslogo-blue.gif"  
URL="http://www.microsoft.com">Microsoft</LItem> 
                     <Blurb>Microsoft-Homepage</Blurb> 
                  </LItemEx> 
                  <LItemEx> 
                     <LItem ID="LI2" LinkGroup="WebSites"  
Image="http://msdn.microsoft.com/library/shared/toolbar/graphics/banners/ 
MSDN_banner.gif" URL="http://msdn.microsoft.com">MSDN</LItem> 
                     <Blurb>Microsoft Developer Network</Blurb> 
                  </LItemEx> 
                  <LItemEx> 
                     <LItem ID="LI3" LinkGroup="SearchEngines"  
URL="http://search.microsoft.com">Microsoft-Suche</LItem> 
                  </LItemEx> 
                  <LItemEx> 
                     <LItem ID="LI4" LinkGroup="SearchEngines"  
URL="http://search.microsoft.com/advanced_search.asp?siteid=us/dev"> 
MSDN-Suche</LItem> 
                  </LItemEx> 
                  <LItemEx> 
                     <LItem ID="LI5" LinkGroup="OtherSites"  
URL="http://www.gotdotnet.com">GotDotNet</LItem> 
                  </LItemEx> 
                  <LItemEx> 
                     <LItem ID="LI6" LinkGroup="OtherSites"  
URL="http://msn.com">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.


Bild04

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="Beispiel 3: Registerkarte mit statischem Inhalt" 
Filterable="false"> 
      <Application ID="Static_App"> 
         <Pane ID="Main_Pane"> 
            <TextSpan ID="Tab_Description" FontSize="16"> 
Beispiel 3--Registerkarte mit statischem Inhalt 
</TextSpan><Break/> 
         <Break/> 
         <TextSpan ID="disclaimer">Anmerkung:  Der Inhalt und Code dieser  
Beispielregisterkarte ist Teil des Whitepaper  
"Anpassen der Visual Studio-Startseite" und wird nicht vom  
Microsoft-Produktsupport unterstützt.</TextSpan> 
            <Break/> 
            <LItemEx> 
               <LItem ID="LI1" LinkGroup="WebSites"  
Image="http://www.microsoft.com/library/homepage/images/ 
mslogo-blue.gif" URL="http://www.microsoft.com">Microsoft</LItem> 
               <Blurb>Microsoft-Homepage</Blurb> 
            </LItemEx> 
            <LItemEx> 
               <LItem ID="LI2" LinkGroup="WebSites"  
Image="http://msdn.microsoft.com/library/shared/toolbar/ 
graphics/banners/MSDN_banner.gif"  
URL="http://msdn.microsoft.com">MSDN</LItem> 
               <Blurb>Microsoft Developer Network</Blurb> 
            </LItemEx> 
            <HRule/> 
            <LItemEx> 
               <LItem ID="LI3" LinkGroup="SearchEngines"  
URL="http://search.microsoft.com">Microsoft-Suche</LItem> 
            </LItemEx> 
            <LItemEx> 
               <LItem ID="LI4" LinkGroup="SearchEngines"  
URL="http://search.microsoft.com/advanced_search.asp?siteid=us/dev"> 
MSDN-Suche</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, dass der XML-Code dem Schema der Startseite entspricht.


Bild05

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), der 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 "Der Inhalt kann nicht vom Server geladen werden" angezeigt.

<?xml version="1.0" encoding="UTF-8" ?> 
<TabDefinition> 
   <Tab ID="live_tab" Name="Beispiel 4: Registerkarte mit Live-Inhalt"  
Filterable="true"> 
      <Application ID="Live_App"> 
         <Pane ID="Main_Pane"> 
            <Break/> 
            <TextSpan ID="Tab_Description"> 
Der Inhalt kann nicht vom Server geladen werden. 
</TextSpan> 
         </Pane> 
      </Application> 
      <Feeds> 
         <Feed> 
            <!--"http://www.test-1.msn.com/serverFeed.asp" unten im  
<Source>-Element durch den Pfad ersetzen, in dem sich die Server-ASP-Datei befindet.--> 
            <Source LCID="1033" URL="http://www.test-1.msn.com/ 
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">  
Beispiel 4--Eine Registerkarte mit Live-Inhalt 
</TextSpan> <Break/> 
            <Break/> 
            <TextSpan ID="disclaimer">Anmerkung:  Der Inhalt und Code dieser  
Beispielregisterkarte ist Teil des Whitepaper "Anpassen der Visual Studio-Startseite"  
und wird nicht vom Microsoft-Produktsupport unterstützt.</TextSpan> 
            <Break/> 
            <HRule/> 
            <LinkGroupSet> 
               <LinkGroup ID="WebSites" Title="Hyperlinks mit Grafiken und Text"/> 
               <LinkGroup ID="SearchEngines" Title="Einfache Hyperlinkliste"/> 
            </LinkGroupSet> 
         </Pane> 
         <Data> 
            <Context> 
               <Links> 
                  <LItemEx> 
                     <LItem ID="LI1" LinkGroup="WebSites"  
Image="http://www.microsoft.com/library/homepage/images/mslogo-blue.gif"  
URL="http://www.microsoft.com">Microsoft</LItem> 
                     <Blurb>Microsoft-Homepage</Blurb> 
                  </LItemEx> 
                  <LItemEx> 
                     <LItem ID="LI2" LinkGroup="WebSites"  
Image="http://msdn.microsoft.com/library/shared/toolbar/graphics/banners/ 
MSDN_banner.gif" URL="http://msdn.microsoft.com">MSDN</LItem> 
                     <Blurb>Microsoft Developer Network</Blurb> 
                  </LItemEx> 
                  <LItemEx> 
                     <LItem ID="LI3" LinkGroup="SearchEngines"  
URL="http://search.microsoft.com">Microsoft-Suche</LItem> 
                  </LItemEx> 
                  <LItemEx> 
                     <LItem ID="LI4" LinkGroup="SearchEngines"  
URL="http://search.microsoft.com/advanced_search.asp?siteid=us/dev"> 
MSDN-Suche</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 
%> 
<!--Mit dieser Funktion wird sichergestellt,  
dass die an den Client zurückgegebenen URLs sicher  
auf der Startseite verwendet werden können.--> 
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 = ""; 
      } 
   } 
}

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.

  • Überprüfen Sie die in diesem Whitepaper aufgeführten Anforderungen, und vergleichen Sie anschließend die Registerkarten-Definitionsdateien mit vstab.xdr. Wenn der Code nicht mit dem Schema übereinstimmt, wird der Inhalt nicht ausgegeben.

  • Verwenden Sie im Menü Bearbeiten den Befehl 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 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 u. U. nicht auf der Startseite aktualisiert, wenn Sie die Option Aktualisieren verwenden.

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 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 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 die 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, dass 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.

Schlussfolgerung

Wie in diesem Whitepaper dargestellt wurde, können Sie auf einfache Art und Weise 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 "Start Page" in der MSDN-Website (in Englisch).

Links zu verwandten Themen

Anzeigen: