如何在VSIX项目的解决方案文件夹中获取项目

戴夫·格林

嗨,我在Visual Studio扩展内部的自定义生成任务遇到了问题。我需要确定自定义项目类型的项目。如果它们位于解决方案的根目录下,我可以做得很好,但是当它位于解决方案文件夹中时,就会出现问题。我可以将解决方案文件夹作为EnvDTE.Project获取,但不确定如何从该文件夹中获取项目。

我以为我可以从项目的Collection属性中获取它,但这是空的。

任何帮助将不胜感激。

if (Scope == EnvDTE.vsBuildScope.vsBuildScopeSolution)
{
    DTE2 dte2 = Package.GetGlobalService(typeof(EnvDTE.DTE)) as DTE2;
    var sol = dte2.Solution;
    EnvDTE.DTE t = dte2.DTE;
    var x = t.Solution.Projects;
    foreach(var proj in x)
    {
       try
       {
           var project = proj as EnvDTE.Project;
           var guid = GetProjectTypeGuids(project);
           if (guid.Contains("FOLDERGUID"))
           {
               //here is where I would get the project from the folder
           }
戴夫·格林

我通过更多的研究和一些反复试验解决了这个问题。万一其他人遇到这个问题,我将主代码更改为

if (Scope == EnvDTE.vsBuildScope.vsBuildScopeSolution)
{
    errorListProvider.Tasks.Clear();
    DTE2 dte2 = Package.GetGlobalService(typeof(DTE)) as DTE2;
    var sol = dte2.Solution;
    var projs = sol.Projects;
    foreach(var proj in sol)
    {
         var project = proj as Project;
         if (project.Kind == ProjectKinds.vsProjectKindSolutionFolder)
         {
             var innerProjects = GetSolutionFolderProjects(project);
             foreach(var innerProject in innerProjects)
             {
                 //carry out actions here.
             }
         }
    }
}

GetSolutionFolderForProjects的代码为

private IEnumerable<Project> GetSolutionFolderProjects(Project project)
{
    List<Project> projects = new List<Project>();
    var y = (project.ProjectItems as ProjectItems).Count;
    for(var i = 1; i <= y; i++)
    {
        var x = project.ProjectItems.Item(i).SubProject;
        var subProject = x as Project;
        if (subProject != null)
        {
          //Carried out work and added projects as appropriate
        }
    }

    return projects;
}

希望这对其他人有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在解决方案文件夹(非物理文件夹)中的项目中创建文件

如何在DotNetCore项目的解决方案中将文件/文件夹标记为不存在?

如何在VSIX项目上获取项目文件夹

如何在Visual Studio 2019的Github解决方案中将不同文件夹中的项目推送或上载?

Angular和Net核心API项目的解决方案和文件夹结构

解决方案根据多项目模板中的项目名称更改文件夹名称

解决方案的项目位于解决方案文件夹之外

如何在具有其他项目的解决方案中编译单个项目?

如何在C#解决方案中引用其他文件夹中的文件

Visual Studio扩展:如何在选择时获取解决方案文件夹的“路径”?

如何在.Net Core项目的解决方案中包含NuGet软件包?

如何在 VisualStudio 解决方案中确定项目的优先级?

如何在一个解决方案中访问跨项目的公共变量

如何为Visual Studio中的解决方案动态创建解决方案文件夹?

Visual Studio 2017:如何在解决方案文件夹中包含NuGet包

如何在VSTemplate的IWizard实现中嵌套解决方案文件夹

当多个解决方案中包含某些项目时,为所有解决方案设置一个公共的nuget软件包文件夹

VSSDK:无法使用包含VSIX项目的混合样式csproj项目构建解决方案

如何在C ++中设置多项目解决方案?

从同一解决方案中的另一个项目访问 wwwroot 文件夹

Visual Studio将项目文件夹复制到输出目录(WPF解决方案)

MSBUILD:错误MSB1011:指定要使用的项目或解决方案文件,因为此文件夹包含多个项目或解决方案文件

如何从解决方案中更改项目的目标版本解决错误?

同一命名空间如何在具有不同项目的单个解决方案中工作

同一解决方案中项目的多个版本?

解决方案 .NET 中 Docker 多个项目的问题

NDepend获取解决方案中每个项目的第三方参考

如何在许多项目的VisualStudio解决方案中集成WebPack

如何在 Blazor 客户端项目的 pages 文件夹中添加子文件夹