Mise à niveau des projetsUpgrading Projects

Modifications du modèle de projet à partir d’une version de Visual Studio à l’autre peuvent nécessiter que les projets et solutions être mis à niveau afin qu’ils puissent exécuter sur la version plus récente.Changes to the project model from one version of Visual 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ées 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 de prendre en charge la sauvegarde de la côte à côte (SxS), sauvegarde de copie 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 copie seulement les fichiers que vous avez besoin de la mise à niveau en 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 à 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.

Comment mettre à niveau WorksHow Upgrade Works

Quand une solution créée dans une version antérieure de Visual Studio est ouvert dans une version plus récente, l’IDE vérifie le fichier de solution pour déterminer si elle doit être mis à niveau.When a solution created in an earlier version of Visual 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 requise, le Assistant Mise à niveau est lancée automatiquement pour guider l’utilisateur au long du processus de mise à niveau.If upgrading is required, the Upgrade Wizard is automatically launched to walk the user through the upgrade process.

Lorsqu’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 la sauvegarde de copie ou côte à côte.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érents, tels 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.

La solution interroge chaque fabrique de projet pour IVsProjectUpgradeViaFactory.The solution queries each project factory for IVsProjectUpgradeViaFactory. Il appelle ensuite UpgradeProject_CheckOnly pour vérifier si les fichiers de projets globale doivent être de la mise à niveau et à 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 a terminé 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 tous les fichiers globales pertinents, 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 de projet doit prendre en charge IVsProjectUpgrade.The project implementation must support IVsProjectUpgrade. Le UpgradeProject méthode est ensuite 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 méthode ne fournit 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 le 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 vous aidera votre sauvegarde et gérer les implémentations de mise à niveau des fichiers de projet sous contrôle de code source, les fichiers dotés d’autorisations suffisantes 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 le SVsUpgradeLogger service pendant toutes les phases de la sauvegarde et de mettre à niveau 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 les 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 au moins doit être obtenue à 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 Studio environnement même si le IVsProjectUpgradeViaFactory interface est appelée ou implémentée.The IVsProjectUpgrade interface is therefore called by the Visual Studio environment even if the IVsProjectUpgradeViaFactory interface is called or implemented. Cette approche vous permet d’utiliser IVsProjectUpgradeViaFactory implémenter la copie et de projeter uniquement les parties de la mise à niveau et de 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 PUVFF_SXSBACKUP 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 PUVFF_SXSBACKUP 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 PUVFF_COPYBACKUP 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 PUVFF_COPYBACKUP flag is specified in the UpgradeProject method, the upgrade is implemented as a copy upgrade.

  • Si le UPF_SILENTMIGRATE indicateur est spécifié dans le UpgradeProject appeler, puis l’utilisateur a été invité par l’environnement pour mettre à niveau le fichier projet comme une mise à niveau sur place, une fois que le projet est ouvert.If the UPF_SILENTMIGRATE 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 UPF_SILENTMIGRATE indicateur n’est pas spécifié dans le UpgradeProject appeler, vous devez inviter l’utilisateur à mettre à niveau le fichier projet.If the UPF_SILENTMIGRATE 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 d’interface, en particulier le UpgradeProject méthode dans votre implémentation de fabrique de projet, ou rendre les 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 PUVFF_SXSBACKUP en tant que 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 PUVFF_SXSBACKUP 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 PUVFF_COPYBACKUP en tant que 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 PUVFF_COPYBACKUP as the VSPUVF_FLAGS parameter in your UpgradeProject implementation.

  4. Pour les étapes 2 et 3, le fichier réel étapes mise à niveau, à l’aide de IVsQueryEditQuerySave2, peut être implémenté comme décrit dans la « implémentation IVsProjectUpgade» ci-dessous, ou vous pouvez déléguer la mise à niveau de fichier réel à 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 de 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, il ne peut pas être utilisé dans le 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 avait déjà été invité à mettre à niveau de la solution, puis le UPF_SILENTMIGRATE indicateur est passé dans le grfUpgradeFlags paramètre.If the user had already been prompted to upgrade the solution, then the UPF_SILENTMIGRATE flag is passed in the grfUpgradeFlags parameter. Si l’utilisateur ouvre un projet directement, ce type comme à l’aide de la ajouter un projet existant commande, puis le UPF_SILENTMIGRATE 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 UPF_SILENTMIGRATE 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 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, elle doit déterminer si le fichier de projet peut être modifié en appelant le QueryEditFiles (méthode) et en passant une valeur de tagVSQueryEditFlags pour le 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 appel sur le fichier projet entraîne le fichier à extraire 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 VS_E_PROJECTMIGRATIONFAILED.Again, if any part of the upgrade process fails, the method must indicate failure by returning VS_E_PROJECTMIGRATIONFAILED. 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 QER_EditNotOK et QER_ReadOnlyUnderScc 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 QER_EditNotOK and the QER_ReadOnlyUnderScc 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 passer une valeur de QEF_ReportOnly pour le rgfQueryEdit paramètre.You call QueryEditFiles and pass in a value of QEF_ReportOnly for the rgfQueryEdit parameter.

  11. Retourne l’environnement QER_EditNotOK pour VSQueryEditResult et QER_ReadOnlyUnderScc bit est défini dans VSQueryEditResultFlags.The environment returns QER_EditNotOK for VSQueryEditResult and the QER_ReadOnlyUnderScc bit is set in VSQueryEditResultFlags.

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

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_HandlesOwnReload).The environment knows that you handle your own project reload if you return true for GetProperty (VSHPROPID_HandlesOwnReload).

  • Si vous ne gérez pas votre propre rechargement du projet, puis vous retournez false pour GetProperty (VSHPROPID_HandlesOwnReload).If you do not handle your own project reload, then you return false for GetProperty (VSHPROPID_HandlesOwnReload). Dans ce cas, avant QueryEditFiles(QEF_ForceEdit_NoPrompting, QEF_DisallowInMemoryEdits) est retournée, l’environnement crée une autre instance de votre projet, par exemple, Project2, 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 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 passer une valeur de QEF_ReportOnly pour le rgfQueryEdit paramètre.You call QueryEditFiles and pass in a value of QEF_ReportOnly for the rgfQueryEdit parameter.

    6. Retourne l’environnement QER_EditOK et la mise à niveau peut continuer, car le fichier projet peut être écrites.The environment returns QER_EditOK and the upgrade can proceed because the project file can be written.

Si vous ne parvenez pas à mettre à niveau, retourner VS_E_PROJECTMIGRATIONFAILED de IVsProjectUpgrade::UpgradeProject.If you fail to upgrade, return VS_E_PROJECTMIGRATIONFAILED 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 VS_E_PROJECTMIGRATIONFAILED, un nœud d’espace réservé est ajouté à la solution pour votre projet.If you return VS_E_PROJECTMIGRATIONFAILED, 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 des systèmes de projet que vous n’implémentez pas, vous devrez peut-être participer au 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 général, les implémenteurs d’élément de projet souhaitent tirer parti d’un projet déjà entièrement instancié et mis à niveau, car ils ont besoin de savoir quelles le 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 de charge automatique lors de l’interpréteur de commandes de Visual Studio 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 Studio shell determines that a project system is in the process of upgrading.

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

  3. Le IVsSolutionEventsProjectUpgrade interface est déclenchée une fois l’implémentation de système de projet a terminé ses opérations de mise à niveau et le nouveau 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ée après le OnAfterOpenSolution, le OnAfterOpenProject, ou le 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 de 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 PUVFF_SXSBACKUP, où les fichiers qui avaient été sauvegardées sont placés le long de fichiers côté qui sont désignés comme « .old ».This applies in particular for a side-by-side backup, where the fUpgradeFlag parameter of the UpgradeProject method is set to PUVFF_SXSBACKUP, 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ètes.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