2010-05-19 20 views
7

Buduję pakiet VS i próbuję wysłać polecenie z pakietu do programu Visual Studio, aby otworzyć wybrany plik użytkownika w nowej karcie (podobnie jak użytkownik zrobiłby to, przechodząc do Plik -> Otwórz ...).Programowo otwórz plik w Visual Studio (2010)

Pamiętam, że w pewnym momencie widziałem, jak to zrobić. Czy ktoś może odświeżyć moją pamięć?

Odpowiedz

7

wierzę chcesz jeden:

  1. IVsUIShellOpenDocument.OpenStandardEditor
  2. DTE.OpenFile
  3. DTE.ItemOperations.OpenFile

W końcu, myślę, że wszystko sprowadza się do tego samego zachowania.

+0

Cześć Chris ... Nie rozumiem tego. Mój obiekt DTE nie ma żadnej z tych metod. A jeśli spróbuję stworzyć nowy obiekt DTE, daje mi to błąd. Jakieś sugestie? – Andrei

+0

Z jakich zestawów się odwołujesz (tzn. Skąd pochodzi twój typ "DTE")? Obiekty "DTE" wymienione powyżej pochodzą z EnvDTE.dll, więc spróbuj dodać do tego odnośnik. Jaki jest błąd, który wystąpił podczas próby utworzenia nowego obiektu 'DTE'? Czy jest to błąd czasu kompilacji lub środowiska wykonawczego? –

+1

Mam odniesienia do wszystkich zespołów ENVDTE80/100. Błąd jest podczas kompilacji: Nie można utworzyć wystąpienia klasy abstrakcyjnej lub interfejsu "EnvDTE80.DTE2" Co więcej, uruchamiam to w Pakiecie VS (ponieważ buduję pakiet VS). – Andrei

7

Lubię używać DTE metody ExecuteCommand („nazwa_polecenia”), jak można przetestować komendę w oknie VS poleceń

W tym przypadku ExecuteCommand („File.OpenFile”)

Możesz dodać parametry do polecenia w drugim opcjonalnym parametrze ciągu, jeśli chcesz.

+0

Jakoś nie mogę znaleźć tej metody. Czy nadal jest dostępny w .NET 4? – Andrei

+0

Właśnie utworzyłem dodatek w VS2010 - szablon tworzy zmienną prywatną: private DTE2 _applicationObject; Możesz pobrać ExecuteCommand stamtąd ... – philhobgen

+0

Ach, tak, rozumiem co masz na myśli. Chodziło o to, że teraz buduję pakiet Visual Studio. Mogę również utworzyć dodatek Visual Studio, ale w takim razie, w jaki sposób utworzyć instancję dodatku, której mogę użyć w pakiecie VS, ale dodatek nadal będzie przechowywać obiekt _applicationObject. Mam nadzieję, że rozumiesz, co mam na myśli, to jest jak korzystanie z obiektu dodatkowego (_applicationObject) z aplikacji WinForm. – Andrei