テンプレートで生成された新しいソリューションに既存のプロジェクトを追加したいと思います。 vstemplateファイルでこれを達成できますか、IWizardを使用する必要がありますか? IWizardを使用する必要がある場合は、どうすれば正しく動作させることができますか?現在、私は次のことを試してみました:カスタムwizarddataでいくつかのソリューションフォルダと一つのプロジェクト テンプレートウィザードを使用してビジュアルスタジオプロジェクトに既存のプロジェクトを追加する方法
- マルチテンプレートを。 $ wizarddata $には、既にハードドライブ上に存在するプロジェクトへの相対パスが含まれています。ウィザードでは、これらのプロジェクトのベースパスを選択します。このプロジェクトを私のソリューションに今追加するにはどうすればいいですか?
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例外をスローします。ビジュアルスタジオのマクロからExecuteCommandを実行すると正常に動作します。私は間違って何をしていますか?
また、このアプローチを使用してサーバーエクスプローラの接続マネージャーを取得しました。このコードを使用しました:DTEとしてのvar dte = automationObject; Microsoft.VisualStudio.Shell.ServiceProvider sp = new Microsoft.VisualStudio.Shell.ServiceProvider((IOleServiceProvider)dte); IVsDataExplorerConnectionManager seConnectionsMgr =(IVsDataExplorerConnectionManager)sp.GetService(typeof(IVsDataExplorerConnectionManager).GUID);うまくいけば、これは他の人に時間を節約します。 – gab