2012-09-07 21 views
5

Tôi đang phát triển một gói Visual Studio và tôi đã viết một số mã sẽ tạo một tệp trong Solution Explorer tùy thuộc vào tệp khác.Làm cách nào để lập trình làm mới/tải lại dự án VS sau khi sửa đổi tệp cơ bản?

Điều này có nghĩa là nó cung cấp cho họ mối quan hệ tương tự như tệp phía sau tệp hoặc tệp thiết kế, nơi chúng xuất hiện lồng trong tệp gốc với biểu tượng dấu cộng/dấu trừ.

+ MainForm.cs 


- MainForm.cs 
    MainForm.Designer.cs 
    MainForm.resx 

Mã mà tôi đã viết thành công và sửa đổi chính xác tệp dự án cơ bản, tuy nhiên thay đổi không được phản ánh trong Solution Explorer cho đến khi dự án được đóng và mở lại.

Tôi đang tìm một số mã sẽ làm mới hoặc tải lại dự án để thay đổi hiển thị trong Solution Explorer ngay lập tức.

Thông tin khác ...

Đây là mã sudo thể hiện cơ chế mà tôi tạo tệp phụ thuộc.

IVsBuildPropertyStorage vsBuildPropertyStorage = GetBuildPropertyStorage(); 
vsBuildPropertyStorage.SetItemAttribute(projectItemIdentifier, "DependentUpon", parentFileName); 

Tôi cũng đã cố gắng thêm thao tác này để cố tải lại dự án nhưng không có tác dụng.

project.Save(); 
VSProject obj = project.Object as VSProject; 
obj.Refresh(); 
+0

Làm cách nào bạn tìm thấy giá trị bạn đã sử dụng cho projectItemIdentifier và bạn đã đưa ra giải pháp tốt để làm mới không liên quan đến việc dỡ dự án? – Colin

+0

@Colin Đây là một cách khá bạo lực để thực hiện các thay đổi trong một dự án bằng cách thao tác thủ công XML của tệp dự án. Một tải lại sẽ được yêu cầu nhưng tôi không bao giờ tìm thấy một cách tốt để làm điều này. Một cách tốt hơn là tìm hoạt động chính xác trong API VS (EnvDTE) và gọi thay vào đó. Đi qua API mạnh mẽ hơn nhiều và VS sẽ chăm sóc bất kỳ việc tải lại cần thiết nào. Bạn đang cố gắng thực hiện thao tác nào? Nếu nó thêm một tập tin phụ thuộc thì tôi có thể giúp với điều đó. – Martyn

+0

@Colin Xin lỗi, tôi không thể trợ giúp với projectItemIdentifier. Tôi đã không sử dụng mã này hoặc bất kỳ mã tương tự nào. VS API có nhiều hướng đối tượng hơn và hoạt động bằng cách bạn cung cấp các đối tượng ProjectItem thay vì các chuỗi định danh. ProjectItems (các tệp và thư mục có hiệu quả trong dự án) có thể được truy xuất bằng cách lặp lại thuộc tính Project.ProjectItems. Nếu bạn thực sự cần projectItemIdentifier thì tôi sẽ đề nghị gỡ lỗi và xem xét các thuộc tính của đối tượng ProjectItem. – Martyn

Trả lời

8

AFAIK cách duy nhất để làm điều này là thông qua tự động hóa các giải pháp Explorer công cụ cửa sổ:

EnvDTE.DTE dte = ...; 

string solutionName = Path.GetFileNameWithoutExtension(dte.Solution.FullName); 
string projectName = project.Name; 

dte.Windows.Item(EnvDTE.Constants.vsWindowKindSolutionExplorer).Activate(); 
((DTE2)dte).ToolWindows.SolutionExplorer.GetItem(solutionName + @"\" + projectName).Select(vsUISelectionType.vsUISelectionTypeSelect); 

dte.ExecuteCommand("Project.UnloadProject"); 
dte.ExecuteCommand("Project.ReloadProject"); 

Lưu ý rằng, nếu dự án chưa được lưu, người dùng sẽ nhận được một hộp thoại hộp trước cuộc gọi "Project.UnloadProject".

Các vấn đề liên quan