2008-09-15 211 views
5

我試圖使用Visual Studio 2008的可擴展性來編寫一個插件,該插件將在解析接口後創建一個包含各種消息的項目文件夾。不過,我在創建/添加文件夾的步驟中遇到了麻煩。我已經使用Visual Studio Extensibility:將現有文件夾添加到項目

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

....也許答案就在於編程方式刷新後刪除該項目?這可以怎麼做?

+0

任何有關它的解決方案嗎?任何答案都有幫助? – Kiquenet 2012-10-17 10:16:12

回答

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); 

如果有這樣做的更優雅的方式,這將是非常讚賞...

感謝。

0

這裏有一個想法,因爲我一直在使用NAnt這麼長時間,並認爲它可能工作。

在文本編輯器中的.csproj文件,並添加目錄,例如:

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

如果「的ItemGroup」已經esists,這很好。只需將其添加到現有的一個。 Visual Studio不會真的知道如何編輯這個條目,但它會掃描整個目錄。

編輯任何你想要的。

3
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將把該目錄和目錄下的所有內容添加到項目中。

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"); 
相關問題