Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ENVDTE-将新项目添加到现有解决方案中,并将其定位到特定文件夹中_C#_Visual Studio 2012_Solution_Envdte - Fatal编程技术网

C# ENVDTE-将新项目添加到现有解决方案中,并将其定位到特定文件夹中

C# ENVDTE-将新项目添加到现有解决方案中,并将其定位到特定文件夹中,c#,visual-studio-2012,solution,envdte,C#,Visual Studio 2012,Solution,Envdte,我在VisualStudio2012上使用c#编写了一个VisualStudio向导模板 我遵循了MSDN的步骤:我创建了一个VS模板,然后我创建了一个类库项目,其中包含一个实现IWizard接口的类,我配置了.vstemplate文件,等等 在我的类库项目中,我从计算机的某个目录复制了一个现有的解决方案,我将新生成的项目添加到该解决方案中,并运行它 我是这样做的: public void RunStarted(object automationObject, Dictionary<str

我在VisualStudio2012上使用c#编写了一个VisualStudio向导模板

我遵循了MSDN的步骤:我创建了一个VS模板,然后我创建了一个类库项目,其中包含一个实现IWizard接口的类,我配置了.vstemplate文件,等等

在我的类库项目中,我从计算机的某个目录复制了一个现有的解决方案,我将新生成的项目添加到该解决方案中,并运行它

我是这样做的:

public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
        {
            solutionDir = replacementsDictionary["$solutiondirectory$"];
            destProjectDir = replacementsDictionary["$destinationdirectory$"];
            projName = replacementsDictionary["$specifiedsolutionname$"];
            EmulationDir = @"MY_PATH\TestSln";
            DirectoryCopy(EmulationDir, solutionDir);
            dte = (DTE2)automationObject;          

        }

public void RunFinished()
        {
            Solution2 solution;
            Project p;
            solution = (Solution2)dte.Solution;
            solution.Open(solutionDir + "\\TestSln.sln");

            p = solution.AddFromFile(destProjectDir + "\\" + projName + ".vcxproj");

        }
public void RunStarted(对象自动对象、字典替换Dictionary、向导runKind runKind、对象[]customParams)
{
solutionDir=replacementsDictionary[“$solutiondirectory$”];
destProjectDir=replacementsDictionary[“$destinationdirectory$”];
projName=replacementsDictionary[“$specifiedsolutionname$”];
仿真目录=@“我的路径\TestSln”;
DirectoryCopy(仿真目录、解决方案目录);
dte=(DTE2)自动对象;
}
public void RunFinished()
{
溶液2溶液;
项目p;
溶液=(溶液2)dte溶液;
solution.Open(solutionDir+“\\TestSln.sln”);
p=solution.AddFromFile(destProjectDir+“\\”+projName+“.vcxproj”);
}
但是我必须将新项目添加到解决方案的特定子文件夹中:上面的代码直接将新项目添加到解决方案中,我想将其添加到solutionDir\apps中

你知道这样做的方法吗?
谢谢

您可以使用以下界面完成此操作:

Project project = getSolutionSubFolder(solution, "SubFolderName");
if (project != null)
{
    SolutionFolder folder = (SolutionFolder)project.Object;
    folder.AddFromFile("yourProjectFilePath");
}
其中
getSolutionSubFolder
方法如下所示:

private static Project getSolutionSubFolder(Solution2 solution, string subfolder)
{
    return 
        solution
            .Projects
            .Cast<Project>()
            .FirstOrDefault(
            p => string.Equals(p.Name, subfolder, StringComparison.Ordinal));
}
私有静态项目getSolutionSubFolder(Solution2解决方案,字符串子文件夹)
{
返回
解决方案
.项目
.Cast()
.第一道防线(
p=>string.Equals(p.Name,subfolder,StringComparison.Ordinal));
}

谢谢,@Yuriy。但是我们决定从2010年迁移到2010年,因此迁移到.vsz模板方法。现在我正在用Java脚本编写模板后面的代码,我仍然需要相同的代码。。。您有Java脚本的替代方案吗?