Freigeben über


Gewusst wie: Ändern Sie ein Projektsystem damit Projekt-Last in mehreren Versionen von Visual Studio

In Visual Studio 2012können Sie ein Projekt, das nicht vom Projektsystem im benutzerdefinierten Laden in einer früheren Version von Visual Studio erstellt wurde, oder Sie können es aktivieren, um auf eine höhere Version zu identifizieren, sofern diese Konvertierung oder reparieren, Veraltung erfordert.

Hinweis

In diesem Kontext wird der Ausdruck Reparieren das Ändern des Projekts, damit er in der Visual Studio-Version automatisch geladen werden kann, in der er oder einer höheren Version erstellt wurde.Konvertierungoder ein Upgrade, bedeutet das Ändern eines Projekts, damit es nicht mehr in der Version geladen werden kann, in dem es erstellt wurde.

Ein Projekt markiert, z. B. inkompatibel

Sie können ein Projekt markiert, z. B. inkompatibel mit früheren Versionen von Visual Studio. Angenommen, Sie in Visual Studio 2012 ein Projekt erstellen, das auf eine Funktion .NET Framework 5 verwendet. Da dieses Projekt kein integriertes Visual Studio 2010 SP1 werden kann, können Sie diese markieren, z. B. nicht kompatibel mit Visual Studio 2010 SP1, damit diese Version nicht versucht, sie zu laden.

Die Komponente, die die nicht kompatible Funktion hinzugefügt wird, ist zum Kennzeichnen des Projekts zuständig, z. B. nicht kompatibel. Die Komponente muss Zugriff auf die IVsHierarchy-Schnittstelle verfügen, die die relevanten Projekte darstellt.

So erstellen Sie ein Projekt markiert, z. B. inkompatibel

  1. Wenn Visual Studio das Projekt nicht kompatiblen identifiziert, wird ein Dialogfeld an, in dem die Berechtigung, alle angegebenen Projekte wie inkompatible zu markieren anfordert. Wenn Sie " Ich stimme zu " klicken, die Projekte zu markieren, wie inkompatible, gibt S_OK AskForUserConsentToBreakAssetCompat der Komponente zurück. Andernfalls wird OLE_E_PROMPTSAVECANCELLEDzurück.

    Warnung

    In den meisten allgemeinen Szenarien IVsHierarchy enthält das Array nur ein Element.

  2. Wenn AskForUserConsentToBreakAssetCompatS_OKzurückgibt, hat die Komponente vor, die die Änderungen akzeptiert oder Kompatibilität unterbrechen.

Wichtig

Sie müssen die VSHPROPID_MinimumDesignTimeCompatVersion-Eigenschaft implementieren, um ein Projekt zu markieren, wie kompatibel oder nicht kompatibel.Wenn z. B. das Projektsystem eine MSBuild-Projektdatei verwendet, fügen Sie der Projektdatei eine Buildeigenschaft <MinimumVisualStudioVersion> hinzu, die einen Wert mit den entsprechenden VSHPROPID_MinimumDesignTimeCompatVersion-Eigenschaftswert verfügt.

Erkennen, ob ein Projekt nicht kompatibel ist

Projekte, die mit der aktuellen Version von Visual Studio inkompatibel sind, müssen aus dem Laden übernommen werden. Darüber hinaus kann ein Projekt, das nicht kompatibel ist, nicht aktualisiert werden oder repariert werden. Daher muss ein Projekt zweimal auf Kompatibilität überprüft werden: Wenn es für Upgrades zuerst berücksichtigt wird, oder reparieren und Sekunde, bevor sie geladen wird.

Um die Erkennung der Projekt inkompatibilität zu aktivieren, müssen Sie das UpgradeProject_CheckOnly und die CreateProject-Methode implementieren. Wenn ein Projekt nicht kompatibel ist, muss UpgradeProject_CheckOnly den Code Erfolgreich VS_S_INCOMPATIBLEPROJECT zurückgeben und CreateProject muss den Fehlercode VS_E_INCOMPATIBLEPROJECTzurückgeben.

Hinweis

Sie können das Ergebnis der Methode UpgradeProject_CheckOnly durch die Kompatibilitätsprüfung zwischengespeichert, damit sie durch den folgenden Aufruf CreateProjectverwendet werden kann.

Wenn beispielsweise die UpgradeProject_CheckOnly und CreateProject-Methoden, die für ein Projektsystem Visual Studio 2010 SP1 eine Projektdatei geschrieben wurde, eine Suche und überprüfen, ob die <MinimumVisualStudioVersion>-Buildeigenschaft „11.0“ lautet, würde Visual Studio 2010 SP1 nicht das Projekt laden. Außerdem wird Projektmappen-Navigator es nicht angeben, dass das Projekt „und“ ist nicht kompatibel wäre laden.

Ein Projekt aktualisieren oder reparierend

Visual Studio 2010 SP1 kann die meisten Projekte konvertieren, die in einer früheren Version von Visual Studio erstellt wurden. Kann Visual Studio 2012 dazu nicht ausführen kann nur bestimmte Projekttypen auch ändern, die in einer früheren Version erstellt wurden, sodass sie in allen Versionen laden können.

Bevor ein Projekt geladen wird, ruft Visual Studio die UpgradeProject_CheckOnly-Methode auf, um zu überprüfen, ob das Projekt aktualisiert werden kann. Wenn das Projekt aktualisiert werden kann, wird die UpgradeProject_CheckOnly-Methode ein Flag fest, das einen späteren Aufruf der UpgradeProject-Methode bewirkt, dass das Projekt zu aktualisieren. Da nicht kompatiblen Projekte nicht aktualisiert werden können, muss UpgradeProject_CheckOnly für die Dashboardkompatibilität Projekt zunächst überprüfen, wie im vorherigen Abschnitt beschrieben.

In Visual Studio 2012können Sie UpgradeProject_CheckOnly implementieren, um zu bestimmen, ob ein Projekt repariert werden kann, bevor es geladen wird. Wenn das Projekt repariert werden kann, sollte UpgradeProject_CheckOnly den Code Erfolgreich VS_S_PROJECTREPAIRONLYUPGRADEREQUIREDzurückgeben. Die möglichen Upgrade Anforderungen werden in VSPUVF_REPAIRFLAGSaufgelistet, und sie enthalten die folgenden Möglichkeiten:

  1. SPUVF_PROJECT_NOREPAIR: Erfordert keine reparieren.

  2. VSPUVF_PROJECT_SAFEREPAIR: Legt das Projekt kompatibel mit Visual Studio 2010 ohne dass die Probleme möglicherweise Treffen mit früheren Versionen des Produkts verfügen.

  3. VSPUVF_PROJECT_UNSAFEREPAIR: Legt das Projekt kompatibel mit Visual Studio 2010 jedoch mit einem Risiko der Probleme, die Sie mit früheren Versionen des Produkts erreicht. Beispielsweise kann das Projekt nicht kompatibel sein, wenn es von verschiedenen SDK-Versionen zwischen Visual Studio 2012 und Visual Studio 2010 abhing.

  4. VSPUVF_PROJECT_ONEWAYUPGRADE: Legt das Projekt nicht kompatibel mit Visual Studio 2010.

  5. VSPUVF_PROJECT_INCOMPATIBLE: Gibt an, dass Visual Studio 2012 dieses Projekt nicht unterstützt.

  6. VSPUVF_PROJECT_DEPRECATED: Gibt an, dass dieses Projekt nicht mehr unterstützt wird.

Wenn implementieren möglicherweise ein Projektsystem ist mit dem Typ (z. B. ein Visual Basic- oder C#-Projektsystem Internet, VSTO Office (Silverlight) und Andere Projekttypen, die auf diesem Projekt erstellt werden), diese Typen die Funktion UpgradeProjectFlavor_CheckOnly aus der IVsProjectFlavorUpgradeViaFactory2-Schnittstelle. Um diese Funktion Arbeit ausführen, der Muss-Aufruf frühere wurde erwähnt IVsProjectUpgradeViaFactory4. UpgradeProject_CheckOnly Implementierung dieses. (Beachten Sie, dass dies bereits im niedrigen Projektsystem von Visual Basic oder C#) implementiert wird. Die Auswirkungen dieser Funktion aktiviert Projekt auch zu bestimmen, um die Anforderungen für ein Upgrade eines Projekts sowie, was das niedrige Projektsystem festgestellt hat. Das Dialogfeld zeigt das größte Kompatibilität der beiden Anforderungen an.

Eine verwaltete Implementierungen sind diese beiden Schnittstellen in der [Microsoft.VisualStudio.Shell.Interop.11.0.dll] Assembly verfügbar.

Wenn Projekte in einer Projektmappe konvertiert werden müssen oder aktualisiert werden, führt Visual Studio 2012 sie in einem Dialogfeld sowie alle inkompatiblen Projekten auf. Wenn Sie die Änderungsvorschläge vorzunehmen, wird die UpgradeProject-Methode aufgerufen, und das Upgrade und Reparaturen ausgeführt werden. Die UpgradeProject-Methode bestimmt, ob die Änderungen vornimmt, dass sie das Laden des Projekts in einer früheren Version von Visual Studio und ggf. verhindern würden, markiert das Projekt als nicht kompatibel. Zum Beispiel geöffnet haben Sie möglicherweise ein Projekt in Visual Studio 2010 mit SP1 erstellen und dann das Projekt in Visual Studio 2012. Beim Upgrade oder reparieren möglich ist, wird ein Dialogfeld angezeigt, um Ihre Berechtigungen anzufordern, die Änderungen vorzunehmen. Wenn Sie zustimmen, werden die Projekte geändert, und dann geladen. Wenn Sie die Projektmappe schließen und dann in Visual Studio 2010 mit SP1 erneut öffnen, werden die aktualisierten Projekte als nicht kompatibel, und die reparierten Projekte ordnungsgemäß geladen werden.