Pracuję nad pakietem Visual Studio i napisałem kod, który spowoduje, że plik w Eksploratorze rozwiązań będzie zależny od innego pliku.Jak programowo odświeżyć/załadować ponownie projekt VS po zmodyfikowaniu pliku bazowego?
Oznacza to, że daje im taką samą relację, jak pliki z kodem źródłowym lub pliki projektantów, gdzie pojawiają się zagnieżdżone pod plikiem nadrzędnym za pomocą ikony plus/minus.
+ MainForm.cs
- MainForm.cs
MainForm.Designer.cs
MainForm.resx
Kod, który pisałem skutecznie i poprawnie modyfikuje plik projektu bazowego, jednak zmiana ta nie jest odzwierciedlona w Solution Explorer, aż projekt zostanie zamknięty i ponownie otwarty.
Poszukuję kodu, który odświeży lub przeładuje projekt, aby zmiana była natychmiast widoczna w Eksploratorze rozwiązań.
dalsze informacje ...
Oto kod sudo, który pokazuje mechanizm, dzięki któremu tworzę plik zależnej.
IVsBuildPropertyStorage vsBuildPropertyStorage = GetBuildPropertyStorage();
vsBuildPropertyStorage.SetItemAttribute(projectItemIdentifier, "DependentUpon", parentFileName);
Próbowałem również dodać to, aby spróbować przeładować projekt, ale nie ma to żadnego wpływu.
project.Save();
VSProject obj = project.Object as VSProject;
obj.Refresh();
W jaki sposób znalazłeś wartość użytą dla projectItemIdentifier i czy znalazłeś dobre rozwiązanie do odświeżania, które nie wymagało rozładowania projektu? – Colin
@Colin To dość brutalny sposób wprowadzania zmian w projekcie przez ręczne manipulowanie plikiem XML projektu. Wymagane będzie ponowne załadowanie, ale nigdy nie znalazłem na to dobrego sposobu. O wiele lepszym sposobem jest znalezienie właściwej operacji w interfejsie API VS (EnvDTE) i wywołanie tego. Przechodzenie przez API jest dużo bardziej niezawodne, a VS zajmie się koniecznym przeładowaniem. Jaką operację próbujesz wykonać? Jeśli dodamy plik zależny, mogę w tym pomóc. – Martyn
@Colin Przepraszamy, nie mogę pomóc z projektemItemIdentifier. W końcu nie używałem tego ani żadnego podobnego kodu. Interfejs VS API jest bardziej zorientowany obiektowo i działa poprzez dostarczanie obiektów ProjectItem zamiast łańcuchów identyfikatorów. Obiekty ProjectItems (faktycznie pliki i foldery w projekcie) można odzyskać przez iterowanie właściwości Project.ProjectItems. Jeśli naprawdę potrzebujesz projectItemIdentifier, sugerowałbym debugowanie i przeglądanie właściwości obiektu ProjectItem. – Martyn