Dav*_*een 9 c# vsix visual-studio-extensions
您好我有一个问题,在Visual Studio扩展中有自定义生成任务.我需要识别我的自定义项目类型的项目.如果它们位于解决方案的根目录下,我可以做到这一点,但是当它在解决方案文件夹中时会出现问题.我可以将解决方案文件夹作为EnvDTE.Project获取,但我不确定如何从该文件夹中获取项目.
我以为我可以从项目Collection属性中获取它,但这是null.
任何帮助将不胜感激.
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
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*een 15
我设法通过更多的研究和一些反复试验来解决这个问题.如果有其他人提出这个问题,我将主要代码更改为
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.
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
希望这有助于其他人.
| 归档时间: |
|
| 查看次数: |
2191 次 |
| 最近记录: |