3

プロジェクトテンプレートを使用してソリューションフォルダーを追加することはできますか?機能が組み込まれていない場合、このためのカスタムタスクを作成することは可能ですか?

4

5 に答える 5

2

これは少しトリッキーです。これは、単純なプロジェクト テンプレートでは実行できません。プロジェクト テンプレートは、単一のプロジェクト レベルでのみ機能します。より高度なロジックを実装するには、WizardExtension.vstemplateを実装し、それをテンプレートのファイル内に登録する必要があります。

<WizardExtension>
    <Assembly>AssemblyInGACWithSomeLogic</Assembly>
    <FullClassName>MySuperWizardExtension</FullClassName>
</WizardExtension> 

MSDNでウィザード拡張機能の詳細を確認できます。

于 2012-02-09T08:52:11.500 に答える
1

このmsdnWebサイトを確認する方法については可能です。または全体の概要について

于 2012-02-09T08:38:01.800 に答える
1

これは、テンプレート ウィザードを使用して実行できます。あなたはすでにそれを実装する方法を知っていると思います。

したがって、RunFinished メソッド内に次の行を記述します。

    var destFolder = Directory.GetParent(path).Parent;
    System.IO.Directory.CreateDirectory(destFolder.FullName + "\\.nuget");
    ((Solution2) _dte.Solution).AddSolutionFolder(destFolder.FullName + "\\.nuget");

Solution2 クラスでは、EnvDTE80.dll を参照する必要があります。_dte は RunStarted メソッドから設定する必要があります。

private DTE _dte;
public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
{
     _dte = (DTE)automationObject;
}
于 2015-06-16T21:49:51.610 に答える
-3

Project Template Wizard で次のスニペットを使用しています (Mike Chaliy の回答を参照)。

        private static SolutionFolder GetSolutionFolder(Solution2 solution) {
        var project = GetSolutionFolderProject(solution);
        return (SolutionFolder) project.Object;
    }

    private static Project GetSolutionFolderProject(Solution2 solution) {
        var project =
            solution.Projects.Cast<Project>().FirstOrDefault(p => p.Name == "Solution Items");
        if (project == null) project = solution.AddSolutionFolder("Solution Items");
        return project;
    }

どこ_solution = (Solution2) _dte.Solution;

于 2012-03-14T16:48:34.470 に答える