5

我正在尝试使用 Visual Studio 2008 的可扩展性来编写一个插件,该插件将在解析界面后创建一个包含各种消息的项目文件夹。但是,我在创建/添加文件夹的步骤中遇到了麻烦。我试过使用

ProjectItem folder = 
item.ProjectItem.Collection.AddFolder(newDirectoryName, string.Empty); 

(项目是我的目标文件,我正在旁边创建一个同名但附加了“消息”的文件夹)但是当文件夹已经存在时它会阻塞(不足为奇)。

如果它已经存在,我尝试将其删除,例如:

DirectoryInfo dirInfo = new DirectoryInfo(newDirectoryParent + 
newDirectoryName); 
if (dirInfo.Exists) 
{
    dirInfo.Delete(true);
}

ProjectItem folder = 
item.ProjectItem.Collection.AddFolder(newDirectoryName, string.Empty); 

我可以看到该文件夹​​在调试时被删除,但它似乎仍然认为该文件夹仍然存在并且死在一个文件夹已经存在异常。

有任何想法吗???

谢谢。

AK

....也许答案在于删除后以编程方式刷新项目?如何做到这一点?

4

5 回答 5

4
ProjectItem pi = null;
var dir = Path.Combine(
      project.Properties.Item("LocalPath").Value.ToString(), SubdirectoryName);
if (Directory.Exists(dir))
    pi = target.ProjectItems.AddFromDirectory(dir);
else
    pi = target.ProjectItems.AddFolder(dir);

ProjectItems.AddFromDirectory会将目录和目录下的所有内容添加到项目中。

于 2011-04-07T19:25:59.057 回答
3

是的,就是这样……

DirectoryInfo dirInfo = new DirectoryInfo(newDirectoryParent + newDirectoryName);

if (dirInfo.Exists)
{
    dirInfo.Delete(true);
    item.DTE.ExecuteCommand("View.Refresh", string.Empty);
}

ProjectItem folder = item.ProjectItem.Collection.AddFolder(newDirectoryName, string.Empty);

如果有更优雅的方式来做到这一点,将不胜感激......

谢谢。

于 2008-09-15T17:25:52.823 回答
2

这是我的方法:

//Getting the current project
private DTE2 _applicationObject;
System.Array projs = (System.Array)_applicationObject.ActiveSolutionProjects;
Project proy=(Project)projs.GetValue(0);
//Getting the path
string path=proy.FullName.Substring(0,proy.FullName.LastIndexOf('\\'));
//Valitating if the path exists
bool existsDirectory= Directory.Exists(path + "\\Directory");
//Deleting and creating the Directory
if (existeClasses)
   Directory.Delete(path + "\\Directory", true);
Directory.CreateDirectory(path + "\\Directory");
//Including in the project
proy.ProjectItems.AddFromDirectory(path + "\\Directory");
于 2011-06-28T20:54:38.227 回答
0

这是我想到的一个想法,因为我使用 NAnt 已经很长时间了,并且认为它可能会起作用。

在文本编辑器中打开 .csproj 文件并添加目录,如下所示:

<ItemGroup>
   <compile include="\path\rootFolderToInclude\**\*.cs" />
</ItemGroup>

如果“ItemGroup”已经存在,那很好。只需将其添加到现有的。Visual Studio 不会真正知道如何编辑此条目,但它会扫描整个目录。

编辑为您想要的任何内容。

于 2009-07-30T20:59:06.240 回答
0

我正在为 Visual Studio 2019 开发一个扩展并且遇到了类似的问题。下一页中提出的问题帮助了我:

https://social.msdn.microsoft.com/Forums/en-US/f4a4f73b-3e13-40bf-99df-9c1bba8fe44e/include-existing-folder-path-as-project-item?forum=vsx

如果该文件夹实际上不存在,您可以使用AddFolder(folderName). 但是,如果该文件夹在物理上存在时不包含在项目中,则需要提供该文件夹的完整系统路径。( AddFolder(fullPath))

于 2020-11-15T15:16:26.513 回答