2017-05-22 1 views
0

J'ai créé une simple extension Visual Studio 2015 qui ajoute une classe au projet en cours.Visual Studio Extension Reload Project

Project p = (Project) ProjectsComboBox.SelectedItem; 

string projectLocation = Path.GetDirectoryName(p.FileName); 
// I load the project where I want to Add file 
var projectCurrent = new Microsoft.Build.Evaluation.Project(p.FileName); 


string relativeNewPath = "\\Model\\DAL\\" + ViewNameTexBox.Text + "DAO.cs"; 
string newPath = projectLocation + relativeNewPath; 

projectCurrent.AddItem("Compile", relativeNewPath); 
projectCurrent.Save(); 

// Once class added to my project I edit text inside newly create class 
string text = File.ReadAllText("Templates/DAO.cs.txt"); 
text = text.Replace("$viewName$", ViewNameTexBox.Text); 
File.WriteAllText(newPath, text); 

Le fichier est inclus dans le projet et modifié, mais Visual Studio invite un message demandant de recharger le projet. Quand je le fais, le projet ne rechargera pas.

le projet a été modifié en dehors de l'environnement

Je voudrais disposer CurrentProject mais projet ne IDisposable. Définir currentProject sur null n'a aucun effet.

Comment puis-je demander à mon code de libérer currentProject et de le recharger par Visual Studio?

+1

Pourquoi [tag: c] tag? –

+0

@IanAbbott miss cliquez sur autocomplete, l'a changé en C# – Yvain

+0

J'ai trouvé une autre façon de le faire, voir ma réponse sur ce [post] (https://stackoverflow.com/a/44160484/1317323) – Yvain

Répondre

0

Vous pouvez décharger le projet avant d'ajouter des fichiers au projet, puis charger à nouveau le projet, Le code suivant pour votre référence.

Microsoft.Build.Evaluation.ProjectCollection projectCollection = new Microsoft.Build.Evaluation.ProjectCollection(); 

var projectCurrent = projectCollection.LoadProject(projectPath); 
projectCollection.UnloadProject(projectCurrent); 

string relativeNewPath = "\\Model\\DAL\\DAO.cs"; 
string newPath = projectPath + relativeNewPath; 
projectCurrent.AddItem("Compile", relativeNewPath); 
projectCurrent.Save(); 
projectCollection.LoadProject(projectPath); 

enter image description here

+0

En utilisant cette solution, j'ai le fichier de lien de projet ajouter à la racine du projet, mais le fichier réel au bon endroit (\\ Model \\ DAO). Aussi, il propose de recharger le projet mais cette fois je peux le recharger. – Yvain

+0

Trouvé! relativePath doit être "Model \\ DAL" au lieu de "\\ Model \\ DAL" – Yvain