VSX:将ProjectItem保存在文件夹中

时间:2017-03-04 13:09:50

标签: c# visual-studio-extensions

我有一个visual studio 2015扩展,它从数据库中读取文件并从模板创建解决方案和项目。然后将这些文件作为ProjectItems添加到项目中(类型VSProject2)。

我想将文件与csproj和sln文件一起保存在文件夹中,以便以后可以在没有扩展名的情况下打开它。

但是,包含解决方案窗口中文件的文件夹在磁盘上为空。

所以我很困惑。我已经尝试保存projectItems,但它仍然没有在磁盘上的文件夹中结束。

我添加了变量名称的文件夹" foldername"到项目。让它成为TimeAndAttendance。因此,在磁盘上创建了一个TempProject文件夹,其中包含一个文件夹TimeAndAttendance。我希望将csproj文件和源文件(添加为ProjectItems)保存在该文件夹中。

  public void CreateSolution()
    {
        // This function creates a solution and adds a Visual C# Class library project to it.
        try
        {
            Solution2 soln = (Solution2)visualStudioInstance.Solution;
            String csTemplatePath;
            Project projCS = null;
            parameterWindowEventsList = new Dictionary<EnvDTE.Window, WindowEvents>();

            String csPrjPath = Path.Combine(Config.Cluster.WorkingPath, "TempProject");

            if (Directory.Exists(csPrjPath))
            {
                DirectoryInfo di = new DirectoryInfo(csPrjPath);
                foreach (var dir in di.GetDirectories())
                {
                    dir.Attributes = FileAttributes.Normal;
                    FileInfo fi = new FileInfo(dir.FullName);
                    fi.IsReadOnly = false;
                    dir.Delete(true);
                }
                di.Attributes = FileAttributes.Normal;
                di.Delete(true);
            }

            csTemplatePath = soln.GetProjectTemplate("TAEngineTemplate.zip", "CSharp");
            // Create a new C# Class Library project using the template obtained above.
            soln.AddFromTemplate(csTemplatePath, csPrjPath, "TAEngineProject", false);

            foreach (Project p in soln.Projects)
            {
                if (String.Compare(p.Name, "TAEngineProject") == 0)
                {
                    projCS = p;
                    break;
                }
            }

            System.Windows.Forms.Application.DoEvents();

            if (projCS != null)
            {
                taEngineProject = projCS.Object as VSProject2;
            }

            taEngineProject.References.Add(Path.Combine(Config.Engine.EngineBinPath, "Engines.TimeAndAttendance.dll"));

            taEngineProject.References.Add("System.Data.DLL");
            taEngineProject.References.Add("System.Xml.DLL");
            taEngineProject.References.Add("System.Core.dll");

            taEngineProject.Project.ProjectItems.AddFolder(folderName);
            taEngineProject.Project.Save(null);                      

        }
        catch (SystemException ex)
        {
            log.Error("Problem with creating solution. " + ex);
        }
    }

最后一行  taEngineProject.Project.Save(null); 似乎没有做任何事情。

以下是我将源文件加载为ProjectItem的位置。如果没有try-catch功能,如何进行任何改进也是受欢迎的。我继承了这段代码,第一次看到它时只是摇了摇头,但我也不知道如何改进它。 : - (

public ProjectItem LoadAsProjectItem(string sourcePath)
    {
        if (taEngineProject != null)
        {
            string filename = sourcePath.Substring(sourcePath.LastIndexOf("\\") + 1);
            ProjectItem retItem;
            ProjectItem projFolderItem = taEngineProject.Project.ProjectItems.Item(folderName);
            try
            {
                retItem = projFolderItem.ProjectItems.Item(filename);
            }
            catch (Exception)
            {
                retItem = projFolderItem.ProjectItems.AddFromFile(sourcePath);

            }

            return retItem;
        }
        return null;
    }

0 个答案:

没有答案