예제 #1
0
        private void ResolveOutputTargetProjectItem(FileBlock fileBlock)
        {
            OutputTarget outputTarget = fileBlock.Target;

            Project project = string.IsNullOrEmpty(outputTarget.ProjectName)
                ? null
                : FindProjectByName(dte, outputTarget.ProjectName);

            ProjectItems targetProjectItems = null;

            if (project != null)
            {
                if (!string.IsNullOrEmpty(outputTarget.ProjectPath))
                {
                    var pathItems    = outputTarget.ProjectPath.Split('\\');
                    var projectItems = project.ProjectItems;
                    foreach (var pathItem in pathItems)
                    {
                        var projItem = FindProjectItem(dte, projectItems, pathItem, Constants.vsProjectItemKindPhysicalFolder);
                        if (projItem != null)
                        {
                            if (projItem.ProjectItems.Count > 0)
                            {
                                projectItems = projItem.ProjectItems;
                            }

                            if (pathItem == pathItems.Last())
                            {
                                targetProjectItems = projItem.ProjectItems;
                            }
                        }
                    }
                }
                else
                {
                    var dir             = Path.GetDirectoryName(project.FileName);
                    var templateFileDir = TemplateFileAsOutputTarget.OutputDirectory;

                    if (dir != templateFileDir)
                    {
                        targetProjectItems = project.ProjectItems;
                    }
                }
            }

            //outputTarget.ProjectItem = targetProjectItem ?? TemplateFileAsOutputTarget;
            if (targetProjectItems != null)
            {
                outputTarget.Update(targetProjectItems);
            }
            else
            {
                fileBlock.Target = TemplateFileAsOutputTarget;
            }
        }