2017-05-22 10 views
0

私は、現在のプロジェクトにクラスを追加するシンプルなビジュアルスタジオ2015拡張を作成しました。Visual Studio拡張リロードプロジェクト

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); 

ファイルはプロジェクトに含まれていますが、修正されましたがビジュアルスタジオにプロンプ​​トが表示され、プロジェクトのリロードを促すメッセージが表示されます。私がそうすると、プロジェクトはリロードされません。

プロジェクトは、私がcurrentProjectを配置したいと思いますが、プロジェクトがIDisposableをでない環境

外に変更されました。 currentProjectをnullに設定しても効果はありません。

私のコードでcurrentProjectを解放し、Visual Studioにリロードする方法を教えてください。

+1

なぜ[タグ:C]タグ? –

+0

@IanAbbottがクリックオートコンプリートを逃した、それをCに変更しました – Yvain

+0

これを行う別の方法が見つかりました。この[投稿](https://stackoverflow.com/a/44160484/1317323)で私の答えをご覧ください。 – Yvain

答えて

0

プロジェクトにファイルを追加する前にプロジェクトをアンロードしてから、プロジェクトを再度読み込みます。次のコードを参考にしてください。

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

このソリューションを使用すると、プロジェクトリンクファイルはプロジェクトルートに追加されますが、実際のファイルは適切な場所(\\ Model \\ DAO)にあります。また、プロジェクトをリロードすることもできますが、今回はリロードすることができます。 – Yvain

+0

見つけた! relativePathは "\\ Model \\ DAL"ではなく "Model \\ DAL"でなければなりません – Yvain

関連する問題