La mise à niveau des projetsUpgrading Projects

Modifie le modèle de projet d’une version de Visual StudioVisual Studio à l’autre peut nécessiter que les projets et solutions être mis à niveau afin qu’ils puissent exécuter sur une version plus récente.Changes to the project model from one version of Visual StudioVisual Studio to the next may require that projects and solutions be upgraded so that they can run on the newer version. Le Kit de développement logiciel Visual StudioVisual Studio SDK fournit des interfaces qui peuvent être utilisés pour implémenter la mise à niveau de prise en charge dans vos propres projets.The Kit de développement logiciel Visual StudioVisual Studio SDK provides interfaces that can be used to implement upgrade support in your own projects.

Stratégies de mise à niveauUpgrade Strategies

Pour prendre en charge une mise à niveau, votre implémentation de système de projet doit définir et implémenter une stratégie de mise à niveau.To support an upgrade, your project system implementation must define and implement an upgrade strategy. Pour déterminer votre stratégie, vous pouvez choisir prendre en charge la sauvegarde de la côte à côte (SxS), copie de sauvegarde ou les deux.In determining your strategy, you can choose to support side-by-side (SxS) backup, copy backup, or both.

  • Sauvegarde de la côte à côte signifie qu’un projet de copie uniquement les fichiers que vous avez besoin de la mise à niveau sur place, ajout d’un suffixe de nom fichier approprié, par exemple, « .old ».SxS backup means that a project copies only those files that need upgrading in place, adding a suitable file name suffix, for example, ".old".

  • Sauvegarde de copie signifie qu’un projet copie tous les éléments de projet vers un emplacement de sauvegarde fourni par l’utilisateur.Copy backup means that a project copies all project items to a user-provided backup location. Les fichiers appropriés à l’emplacement du projet d’origine sont ensuite mis à niveau.The relevant files at the original project location are then upgraded.

Fonctionnement de la mise à niveauHow Upgrade Works

Lorsqu’une solution créée dans une version antérieure de Visual StudioVisual Studio est ouvert dans une version plus récente, les vérifications de l’IDE de fichier pour déterminer s’il doit être mis à niveau la solution.When a solution created in an earlier version of Visual StudioVisual Studio is opened in a newer version, the IDE checks the solution file to determine if it needs to be upgraded. Si la mise à niveau est nécessaire, le Assistant Mise à niveau est automatiquement lancé pour parcourir l’utilisateur à travers le processus de mise à niveau.If upgrading is required, the Upgrade Wizard is automatically launched to walk the user through the upgrade process.

Quand une solution a besoin de la mise à niveau, il interroge chaque fabrique de projet pour sa stratégie de mise à niveau.When a solution needs upgrading, it queries each project factory for its upgrade strategy. La stratégie détermine si la fabrique de projet prend en charge côte à côte ou une sauvegarde de copie.The strategy determines whether the project factory supports copy backup or SxS backup. Les informations sont envoyées à la Assistant Mise à niveau, qui collecte les informations requises pour la sauvegarde et présente les options applicables à l’utilisateur.The information is sent to the Upgrade Wizard, which collects the information required for the backup and presents the applicable options to the user.

Solutions à projets multiplesMulti-Project Solutions

Si une solution contient plusieurs projets et les stratégies de mise à niveau sont différentes, telles que lorsqu’un projet C++ qui prend uniquement en charge la sauvegarde de la côte à côte et un projet Web qui prennent uniquement en charge la sauvegarde de copie, les fabriques de projet doivent négocier la stratégie de mise à niveau.If a solution contains multiple projects and the upgrade strategies differ, such as when a C++ project that only supports SxS backup and a Web project that only support copy backup, the project factories must negotiate the upgrade strategy.

Chaque fabrique de projet pour des requêtes de la solution IVsProjectUpgradeViaFactory.The solution queries each project factory for IVsProjectUpgradeViaFactory. Il appelle ensuite UpgradeProject_CheckOnly afin de déterminer si les fichiers projet global nécessitent la mise à niveau et pour déterminer les stratégies de mise à niveau pris en charge.It then calls UpgradeProject_CheckOnly to see if global project files need upgrading and to determine the supported upgrade strategies. Le Assistant Mise à niveau est ensuite appelée.The Upgrade Wizard is then invoked.

Une fois que l’utilisateur termine l’Assistant, UpgradeProject est appelée sur chaque fabrique de projet pour effectuer la mise à niveau réelle.After the user completes the wizard, UpgradeProject is called on each project factory to perform the actual upgrade. Pour faciliter les sauvegardes, les méthodes de IVsProjectUpgradeViaFactory fournissent la SVsUpgradeLogger service pour consigner les détails de la mise à niveau.To facilitate backup, IVsProjectUpgradeViaFactory methods provide the SVsUpgradeLogger service to log the details of the upgrade process. Ce service ne peut pas être mis en cache.This service cannot be cached.

Après la mise à jour de tous les fichiers globales appropriés, chaque fabrique de projet peut choisir instancier un projet.After updating all relevant global files, each project factory can choose to instantiate a project. L’implémentation du projet doit prendre en charge IVsProjectUpgrade.The project implementation must support IVsProjectUpgrade. Le UpgradeProject méthode est alors appelée pour mettre à niveau tous les éléments de projet approprié.The UpgradeProject method is then called to upgrade all relevant project items.

Note

Le UpgradeProject n’offre pas le service SVsUpgradeLogger.The UpgradeProject method does not provide the SVsUpgradeLogger service. Ce service peut être obtenu en appelant QueryService.This service can be obtained by calling QueryService.

Meilleures pratiquesBest Practices

Utilisez la SVsQueryEditQuerySave service pour vérifier si vous pouvez modifier un fichier avant de le modifier et que vous pouvez l’enregistrer avant de l’enregistrer.Use the SVsQueryEditQuerySave service to check if you can edit a file before editing it, and can save it before saving it. Cela permettra la sauvegarde et gérer les implémentations mise à niveau des fichiers de projet sous contrôle de code source, les fichiers avec des autorisations insuffisantes et ainsi de suite.This will help your backup and upgrade implementations handle project files under source control, files with insufficient permissions, and so forth.

Utilisez la SVsUpgradeLogger de service au cours de toutes les phases de la sauvegarde et la mise à niveau pour fournir des informations sur la réussite ou l’échec de la mise à niveau.Use the SVsUpgradeLogger service during all phases of backup and upgrade to provide information on the success or failure of the upgrade process.

Pour plus d’informations sur la sauvegarde et la mise à niveau des projets, consultez les commentaires pour IVsProjectUpgrade dans vsshell2.idl.For more information about backing up and upgrading projects, see the comments for IVsProjectUpgrade in vsshell2.idl.

La mise à niveau de projets personnalisésUpgrading Custom Projects

Si vous modifiez les informations persistantes dans le fichier projet entre des versions Visual Studio différentes de votre produit, vous devez prendre en charge la mise à niveau de votre fichier projet vers la version la plus récente.If you change the information persisted in the project file between different Visual Studio versions of your product, then you need to support upgrading your project file from the old to the new version. Pour prendre en charge la mise à niveau qui vous permet de participer à la Assistant Conversion de Visual Studio, implémenter la IVsProjectUpgradeViaFactory interface.To support upgrading that allows you to participate in the Visual Studio Conversion Wizard, implement the IVsProjectUpgradeViaFactory interface. Cette interface fournit le seul mécanisme disponible pour mettre à niveau une copie.This interface contains the only mechanism available for copy upgrading. La mise à niveau du projet est une étape du processus d’ouverture de la solution.The upgrading of the project happens as a part of the solution opens. Le IVsProjectUpgradeViaFactory interface est implémentée par la fabrique de projet, ou doit être au moins peut être obtenu à partir de la fabrique de projets.The IVsProjectUpgradeViaFactory interface is implemented by the project factory, or should at least be obtainable from the project factory.

L’ancien mécanisme qui utilise le IVsProjectUpgrade interface est toujours pris en charge, mais conceptuellement met à niveau le système de projet dans le cadre du projet ouvert.The old mechanism that uses the IVsProjectUpgrade interface is still supported, but conceptually upgrades the project system as a part of the project open. Le IVsProjectUpgrade interface est donc appelée par le Visual StudioVisual Studio environnement même si le IVsProjectUpgradeViaFactory interface est appelée ou implémentée.The IVsProjectUpgrade interface is therefore called by the Visual StudioVisual Studio environment even if the IVsProjectUpgradeViaFactory interface is called or implemented. Cette approche vous permet d’utiliser IVsProjectUpgradeViaFactory pour implémenter la copie et uniquement les parties de la mise à niveau du projet et déléguer le reste du travail à effectuer sur place (éventuellement au nouvel emplacement) par le IVsProjectUpgrade interface.This approach allows you to use IVsProjectUpgradeViaFactory to implement the copy and project only portions of the upgrade, and delegate the rest of the work to be done in-place (possibly at the new location) by the IVsProjectUpgrade interface.

Pour un exemple d’implémentation de IVsProjectUpgrade, consultez exemples d’extensibilité Visual Studio.For a sample implementation of IVsProjectUpgrade, see VSSDK Samples.

Scénarios possibles lors d’une mise à niveau de projet :The following scenarios arise with project upgrades:

  • Si le fichier présente un format récent non pris en charge par le projet, il doit retourner une erreur indiquant ce problème.If the file is of a newer format than the project can support, then it must return an error stating this. Cela suppose que l’ancienne version de votre produit inclut le code de vérification de la version.This assumes that the older version of your product includes code to check for the version.

  • Si le __VSPPROJECTUPGRADEVIAFACTORYFLAGS indicateur est spécifié dans le UpgradeProject (méthode), la mise à niveau va être implémentée comme une mise à niveau sur place avant l’ouverture du projet.If the __VSPPROJECTUPGRADEVIAFACTORYFLAGS flag is specified in the UpgradeProject method, the upgrade is going to be implemented as an in-place upgrade prior to the opening of the project.

  • Si le __VSPPROJECTUPGRADEVIAFACTORYFLAGS indicateur est spécifié dans le UpgradeProject méthode, la mise à niveau est implémentée comme une mise à niveau de la copie.If the __VSPPROJECTUPGRADEVIAFACTORYFLAGS flag is specified in the UpgradeProject method, the upgrade is implemented as a copy upgrade.

  • Si le __VSUPGRADEPROJFLAGS indicateur est spécifié dans le UpgradeProject appeler, puis l’utilisateur est invité par l’environnement pour mettre à niveau le fichier projet en tant qu’une mise à niveau sur place, une fois que le projet est ouvert.If the __VSUPGRADEPROJFLAGS flag is specified in the UpgradeProject call, then the user has been prompted by the environment to upgrade the project file as an in-place upgrade, after the project is opened. Par exemple, l’environnement invite l’utilisateur à effectuer la mise à niveau quand celui-ci ouvre une version antérieure de la solution.For example, the environment prompts the user to upgrade when the user opens an older version of the solution.

  • Si le __VSUPGRADEPROJFLAGS indicateur n’est pas spécifié dans le UpgradeProject appeler, vous devez inviter l’utilisateur à mettre à niveau le fichier projet.If the __VSUPGRADEPROJFLAGS flag is not specified in the UpgradeProject call, then you must prompt the user to upgrade the project file.

    Voici un exemple de message d’invite de mise à niveau :The following is an example upgrade prompt message:

    « Le projet '%1' a été créé avec une version antérieure de Visual Studio."The project '%1' was created with an older version of Visual Studio. Si vous l’ouvrez avec cette version de Visual Studio, vous ne pourrez peut-être plus l’ouvrir avec les versions antérieures de Visual Studio.If you open it with this version of Visual Studio, you may not be able to open it with older versions of Visual Studio. Voulez-vous continuer et ouvrir ce projet ? »Do you want to continue and open this project?"

Pour implémenter IVsProjectUpgradeViaFactoryTo implement IVsProjectUpgradeViaFactory

  1. Implémentez la méthode de la IVsProjectUpgradeViaFactory de l’interface, en particulier la UpgradeProject méthode dans votre implémentation de fabrique de projet, ou effectuer des implémentations pouvant être appelé à partir de votre implémentation de fabrique de projet.Implement the method of the IVsProjectUpgradeViaFactory interface, specifically the UpgradeProject method in your project factory implementation, or make the implementations callable from your project factory implementation.

  2. Si vous souhaitez effectuer une mise à niveau sur place dans le cadre de la solution d’ouverture, spécifiez l’indicateur __VSPPROJECTUPGRADEVIAFACTORYFLAGS comme le VSPUVF_FLAGS paramètre dans votre UpgradeProject implémentation.If you want to do an in-place upgrade as a part of the solution opening, supply the flag __VSPPROJECTUPGRADEVIAFACTORYFLAGS as the VSPUVF_FLAGS parameter in your UpgradeProject implementation.

  3. Si vous souhaitez effectuer une mise à niveau sur place dans le cadre de la solution d’ouverture, spécifiez l’indicateur __VSPPROJECTUPGRADEVIAFACTORYFLAGS comme le VSPUVF_FLAGS paramètre dans votre UpgradeProject implémentation.If you want to do an in-place upgrade as a part of the solution opening, supply the flag __VSPPROJECTUPGRADEVIAFACTORYFLAGS as the VSPUVF_FLAGS parameter in your UpgradeProject implementation.

  4. Pour les étapes 2 et 3, le fichier réel mise à niveau de la procédure, à l’aide de IVsQueryEditQuerySave2, peut être implémenté comme décrit dans le « implémentation IVsProjectUpgade» ci-dessous, ou vous pouvez déléguer la mise à niveau de fichier réel pour IVsProjectUpgrade.For both the steps 2 and 3, the actual file upgrade steps, using IVsQueryEditQuerySave2, can be implemented as described in the "Implementing IVsProjectUpgade" section below, or you can delegate the actual file upgrade to IVsProjectUpgrade.

  5. Utilisez les méthodes de IVsUpgradeLogger pour valider la mise à niveau des messages pour l’utilisateur à l’aide de l’Assistant Migration Visual Studio connexes.Use the methods of IVsUpgradeLogger to post upgrade related messages for the user using Visual Studio Migration Wizard.

  6. IVsFileUpgrade interface est utilisée pour implémenter n’importe quel type de mise à niveau de fichier qui doit se produire dans le cadre de la mise à niveau du projet.IVsFileUpgrade interface is used to implement any kind of file upgrade that needs to happen as part of project upgrade. Cette interface n’est pas appelée à partir de IVsProjectUpgradeViaFactory, mais n’est fourni comme un mécanisme pour mettre à niveau des fichiers qui font partie du système de projet, mais le système de projet principal n’est peut-être pas directement connaissance.This interface is not called from IVsProjectUpgradeViaFactory, but is supplied as a mechanism to upgrade files that are part of the project system, but the main project system might not be directly aware of. Par exemple, cette situation peut se produire si les fichiers et les propriétés liés au compilateur ne sont pas gérés par la même équipe de développement que celle qui gère le reste du système de projet.For example, this situation could arise if the compiler related files and properties are not handled by the same development team that handles the rest of the project system.

Implémentation d’IVsProjectUpgradeIVsProjectUpgrade Implementation

Si votre système de projet implémente IVsProjectUpgrade uniquement, elle ne peut pas participer à la Assistant Conversion de Visual Studio.If your project system implements IVsProjectUpgrade only, it can not participate in the Visual Studio Conversion Wizard. Toutefois, même si vous implémentez le IVsProjectUpgradeViaFactory interface, vous pouvez déléguer la mise à niveau fichier IVsProjectUpgrade implémentation.However, even if you implement the IVsProjectUpgradeViaFactory interface, you can still delegate the file upgrade to IVsProjectUpgrade implementation.

Pour implémenter IVsProjectUpgradeTo implement IVsProjectUpgrade

  1. Lorsqu’un utilisateur tente d’ouvrir un projet, le UpgradeProject méthode est appelée par l’environnement après l’ouverture du projet et avant tout autre utilisateur peut prendre des mesures sur le projet.When a user attempts to open a project, the UpgradeProject method is called by the environment after the project is opened and before any other user action can be taken on the project. Si l’utilisateur a déjà été invité à mettre à niveau la solution, puis le __VSUPGRADEPROJFLAGS indicateur est passé dans le grfUpgradeFlags paramètre.If the user had already been prompted to upgrade the solution, then the __VSUPGRADEPROJFLAGS flag is passed in the grfUpgradeFlags parameter. Si l’utilisateur ouvre un projet directement, tels qu’à l’aide de la ajouter un projet existant commande, le __VSUPGRADEPROJFLAGS indicateur n’est pas passé et le projet doit inviter l’utilisateur à mettre à niveau.If the user opens a project directly, such as by using the Add Existing Project command, then the __VSUPGRADEPROJFLAGS flag is not passed and the project needs to prompt the user to upgrade.

  2. En réponse à la UpgradeProject appel, le projet doit évaluer si le fichier projet est mis à niveau.In response to the UpgradeProject call, the project must evaluate whether the project file is upgraded. Si le projet n’a pas besoin de mettre à niveau le type de projet vers une nouvelle version, il peut simplement retourner la S_OK indicateur.If the project does not need to upgrade the project type to a new version, then it can simply return the S_OK flag.

  3. Si le projet doit mettre à niveau le type de projet vers une nouvelle version, il doit déterminer si le fichier projet peut être modifié en appelant le QueryEditFiles méthode et en passant une valeur de tagVSQueryEditFlags pour la rgfQueryEdit paramètre.If the project needs to upgrade the project type to a new version, then it must determine whether the project file can be modified by calling the QueryEditFiles method and passing in a value of tagVSQueryEditFlags for the rgfQueryEdit parameter. Ensuite, le projet doit effectuer les opérations suivantes :The project then needs to do the following:

  4. Si le QueryEditFiles provoque l’appel sur le fichier projet le fichier à récupérer et la dernière version à récupérer, puis le projet est déchargé et rechargé.If the QueryEditFiles call on the project file causes the file to be checked out, and the latest version to be retrieved, then the project is unloaded and reloaded. Le UpgradeProject méthode est appelée à nouveau une fois qu’une autre instance du projet est créée.The UpgradeProject method is called again once another instance of the project is created. À ce deuxième appel, le fichier projet peut être écrit sur le disque. Il est recommandé que le projet enregistre une copie du fichier projet dans le format antérieur avec l’extension de fichier .OLD, qu’il apporte les modifications nécessaires pour la mise à niveau, puis qu’il enregistre le fichier projet dans le nouveau format.On this second call, the project file can be written to disk; it is recommended that the project save a copy of the project file in the previous format with an .OLD extension, make its necessary upgrade changes, and save the project file in the new format. Là encore, si une partie de la mise à niveau échoue, la méthode doit indiquer une erreur en retournant VSErrorCodes.Again, if any part of the upgrade process fails, the method must indicate failure by returning VSErrorCodes. Le projet est alors déchargé dans l’Explorateur de solutions.This causes the project to be unloaded in Solution Explorer.

    Il est important de comprendre le processus complet qui se produit dans l’environnement pour le cas dans lequel l’appel à la QueryEditFiles (méthode) (en spécifiant une valeur de ReportOnly) retourne le tagVSQueryEditResult et tagVSQueryEditResultFlags indicateurs.It is important to understand the complete process that occurs in the environment for the case in which the call to the QueryEditFiles method (specifying a value of ReportOnly) returns the tagVSQueryEditResult and the tagVSQueryEditResultFlags flags.

  5. L’utilisateur tente d’ouvrir le fichier projet.The user attempts to open the project file.

  6. L’environnement appelle votre CanCreateProject implémentation.The environment calls your CanCreateProject implementation.

  7. Si CanCreateProject retourne true, l’environnement appelle votre CanCreateProject implémentation.If CanCreateProject returns true, then the environment calls your CanCreateProject implementation.

  8. L’environnement appelle votre Load implémentation pour ouvrir le fichier et initialiser l’objet de projet, par exemple, Projet1.The environment calls your Load implementation to open the file and initialize the project object, for example, Project1.

  9. L’environnement appelle votre implémentation d’ IVsProjectUpgrade::UpgradeProject pour déterminer si le fichier projet doit être mis à niveau.The environment calls your IVsProjectUpgrade::UpgradeProject implementation to determine whether the project file needs to be upgraded.

  10. Vous appelez QueryEditFiles et passez une valeur de tagVSQueryEditFlags pour la rgfQueryEdit paramètre.You call QueryEditFiles and pass in a value of tagVSQueryEditFlags for the rgfQueryEdit parameter.

  11. L’environnement retourne tagVSQueryEditResult pour VSQueryEditResult et tagVSQueryEditResultFlags bit est défini dans VSQueryEditResultFlags.The environment returns tagVSQueryEditResult for VSQueryEditResult and the tagVSQueryEditResultFlags bit is set in VSQueryEditResultFlags.

  12. Votre IVsProjectUpgrade implémentation appelle IVsQueryEditQuerySave::QueryEditFiles (tagVSQueryEditFlags, tagVSQueryEditFlags).Your IVsProjectUpgrade implementation calls IVsQueryEditQuerySave::QueryEditFiles (tagVSQueryEditFlags, tagVSQueryEditFlags).

    Cet appel peut entraîner l’extraction d’une nouvelle copie de votre fichier projet et la récupération de la version la plus récente, ainsi que la nécessité de recharger votre fichier projet.This call may cause a new copy of your project file to be checked out and the latest version retrieved, as well as a need to reload your project file. À ce stade, il y a deux cas de figure possibles :At this point, one of two things happen:

  • Si vous gérez votre propre rechargement du projet, l’environnement appelle votre ReloadItem mise en œuvre (VSITEMID_ROOT).If you handle your own project reload, then the environment calls your ReloadItem (VSITEMID_ROOT) implementation. Quand vous recevez cet appel, rechargez la première instance de votre projet (Projet1) et continuez la mise à niveau de votre fichier projet.When you receive this call, reload the first instance of your project (Project1) and continue upgrading your project file. L’environnement sait que vous gérez votre propre rechargement du projet si vous retournez true pour GetProperty (__VSHPROPID).The environment knows that you handle your own project reload if you return true for GetProperty (__VSHPROPID).

  • Si vous ne gérez pas votre propre rechargement du projet, puis vous retournez false pour GetProperty (__VSHPROPID).If you do not handle your own project reload, then you return false for GetProperty (__VSHPROPID). Dans ce cas, avant de QueryEditFiles(QEF_ForceEdit_NoPrompting, QEF_DisallowInMemoryEdits) est retournée, l’environnement crée une autre instance de votre projet, par exemple, Projet2, comme suit :In this case, before QueryEditFiles(QEF_ForceEdit_NoPrompting, QEF_DisallowInMemoryEdits) returns, the environment creates another new instance of your project, for example, Project2, as follows:

    1. L’environnement appelle Close sur le premier objet de projet, Projet1, ce qui fait passer cet objet à l’état inactif.The environment calls Close on your first project object, Project1, thus placing this object in the inactive state.

    2. L’environnement appelle votre implémentation d’ IVsProjectFactory::CreateProject pour créer une deuxième instance de votre projet (Projet2).The environment calls your IVsProjectFactory::CreateProject implementation to create a second instance of your project, Project2.

    3. L’environnement appelle votre implémentation d’ IPersistFileFormat::Load pour ouvrir le fichier et initialiser le deuxième objet projet (Projet2).The environment calls your IPersistFileFormat::Load implementation to open the file and initialize the second project object, Project2.

    4. L’environnement appelle IVsProjectUpgrade::UpgradeProject une deuxième fois pour déterminer si l’objet projet doit être mis à niveau.The environment calls IVsProjectUpgrade::UpgradeProject for a second time to determine whether the project object should be upgraded. Toutefois, cet appel est effectué sur la nouvelle instance (la deuxième) du projet, Projet2.However, this call is made on a new, second, instance of the project, Project2. Il s’agit du projet qui est ouvert dans la solution.This is the project that is opened in the solution.

      Note

      Dans l’instance de votre premier projet, Projet1, est placé dans l’état inactif, puis vous devez retourner S_OK à partir du premier appel à votre UpgradeProject implémentation.In the instance that your first project, Project1, is placed in the inactive state, then you must return S_OK from the first call to your UpgradeProject implementation.

    5. Vous appelez QueryEditFiles et passez une valeur de tagVSQueryEditFlags pour la rgfQueryEdit paramètre.You call QueryEditFiles and pass in a value of tagVSQueryEditFlags for the rgfQueryEdit parameter.

    6. L’environnement retourne tagVSQueryEditResult et la mise à niveau peut continuer, car le fichier de projet peut être écrit.The environment returns tagVSQueryEditResult and the upgrade can proceed because the project file can be written.

    Si vous ne parvenez pas à mettre à niveau, retourner VSErrorCodes de IVsProjectUpgrade::UpgradeProject.If you fail to upgrade, return VSErrorCodes from IVsProjectUpgrade::UpgradeProject. Si aucune mise à niveau n’est nécessaire ou si vous choisissez de ne pas faire la mise à niveau, gérez l’appel IVsProjectUpgrade::UpgradeProject comme une absence d’opération.If no upgrade is necessary or you choose not to upgrade, treat the IVsProjectUpgrade::UpgradeProject call as a no-op. Si vous retournez VSErrorCodes, un nœud d’espace réservé est ajouté à la solution pour votre projet.If you return VSErrorCodes, a placeholder node is added to the solution for your project.

Mise à niveau d’éléments de projetUpgrading Project Items

Si vous ajoutez ou gérez les éléments à l’intérieur de systèmes de projet que vous n’implémentez pas, vous devrez peut-être devant être inclus dans le processus de mise à niveau du projet.If you add or manage items inside project systems you do not implement, you may need to participate in the project upgrade process. Crystal Reports est un exemple d’un élément qui peut être ajouté au système de projet.Crystal Reports is an example of an item that can be added to the project system.

En règle générale, les implémenteurs d’élément de projet voulez tirer parti d’un projet déjà entièrement instancié et mis à niveau, car ils ont besoin de savoir quel projet sont des références et les autres propriétés de projet il à prendre une décision de mise à niveau.Typically, project item implementers want to leverage an already fully instantiated and upgraded project because they need to know what the project references are and what other project properties are there to make an upgrade decision.

Pour obtenir la notification de mise à niveau du projetTo get the project upgrade notification

  1. Définir le SolutionOrProjectUpgrading indicateur (défini dans vsshell80.idl) dans votre implémentation d’élément de projet.Set the SolutionOrProjectUpgrading flag (defined in vsshell80.idl) in your project item implementation. Cela provoque votre élément de projet VSPackage automatiquement charger lorsque les Visual StudioVisual Studio shell détermine qu’un système de projet est en cours de la mise à niveau.This causes your project item VSPackage to auto load when the Visual StudioVisual Studio shell determines that a project system is in the process of upgrading.

  2. Informez le IVsSolutionEventsProjectUpgrade interface via le AdviseSolutionEvents (méthode).Advise the IVsSolutionEventsProjectUpgrade interface via the AdviseSolutionEvents method.

  3. Le IVsSolutionEventsProjectUpgrade interface est déclenché après la mise en oeuvre du système de projet a terminé ses opérations de mise à niveau et le projet mis à niveau est créé.The IVsSolutionEventsProjectUpgrade interface is fired after the project system implementation has completed its upgrade operations and the new upgraded project is created. Selon le scénario, le IVsSolutionEventsProjectUpgrade interface est déclenché après la OnAfterOpenSolution, le OnAfterOpenProject, ou OnAfterLoadProject méthodes.Depending on the scenario, the IVsSolutionEventsProjectUpgrade interface is fired after the OnAfterOpenSolution, the OnAfterOpenProject, or the OnAfterLoadProject methods.

Pour mettre à niveau les fichiers d’élément de projetTo upgrade the project item files

  1. Vous devez gérer soigneusement le processus de sauvegarde du fichier dans votre implémentation d’élément de projet.You must carefully manage the file backup process in your project item implementation. Cela s’applique en particulier pour une sauvegarde côte à côte, où le fUpgradeFlag paramètre de la UpgradeProject méthode est définie sur __VSPPROJECTUPGRADEVIAFACTORYFLAGS, l’emplacement des fichiers qui a déjà été sauvegardés le long de fichiers côté désignées comme « .old ».This applies in particular for a side-by-side backup, where the fUpgradeFlag parameter of the UpgradeProject method is set to __VSPPROJECTUPGRADEVIAFACTORYFLAGS, where files that had been backed up are placed along side files that are designated as ".old". Les fichiers sauvegardés antérieures à l’heure système lorsque le projet a été mis à niveau peuvent être désignées comme obsolète.The backed up files older than the system time when the project was upgraded can be designated as stale. En outre, ils peuvent être remplacés, sauf si vous prenez des mesures spécifiques pour éviter ce problème.Furthermore, they might be overwritten unless you take specific steps to prevent this.

  2. Au moment où votre élément de projet reçoit une notification de la mise à niveau du projet, le Assistant Conversion de Visual Studio est toujours affichée.At the time your project item gets a notification of the project upgrade, the Visual Studio Conversion Wizard is still displayed. Par conséquent, vous devez utiliser les méthodes de la IVsUpgradeLogger interface pour fournir des messages de mise à niveau à l’interface utilisateur de l’Assistant.Therefore, you should use the methods of the IVsUpgradeLogger interface to provide upgrade messages to the wizard UI.

Voir aussiSee Also

ProjetsProjects