テンプレートによって生成された新しいソリューションに既存のプロジェクトを追加したいと思います。vstemplateファイルを介してこれを達成できますか、それともIWizardを使用する必要がありますか?また、IWizardを使用する必要がある場合、どうすれば正しく操作できますか。現在、私は以下を試しました:
- いくつかのソリューションフォルダと1つのプロジェクトを追加するマルチプロジェクトテンプレート
- カスタムwizarddataを使用したウィザード。$ widgetdata $には、ハードドライブにすでに存在するプロジェクトへの相対パスがいくつか含まれています。ウィザードで、これらのプロジェクトのベースパスを選択します。このプロジェクトを今すぐソリューションに追加するにはどうすればよいですか?
主な問題は、Solutionオブジェクトに何も含まれていないことのようです。
var type = Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
var dte2 = (EnvDTE80.DTE2)Activator.CreateInstance(type);
var solution = (EnvDTE100.Solution4)dte2.Solution;
var projects = dte2.ActiveSolutionProjects;
プロジェクトにはプロジェクトが含まれていません。同じことがdte2.Solution.Projectsにも当てはまります。このコードは、IWizard実装のRunFinished関数で呼び出されます。または:
var type = Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
var dte2 = (EnvDTE80.DTE2)Activator.CreateInstance(type);
dte2.ExecuteCommand("File.AddExistingProject", "X:\\Path\\To\\Project\\ProjectName.csproj");
COM例外をスローします。Visual StudioのマクロからExecuteCommandを実行すると、正常に動作します。私は何が間違っているのですか?