2014-09-01 13 views
5

Kilka rozszerzeń, których używam, jest zepsuta pod VS2012, ponieważ w pewnym momencie zostały one zaktualizowane do pracy z VS2013, przez zmianę wersji odwołujących się bibliotek. W czasie wykonywania błąd jak ten może być produkowany:W jaki sposób rozszerzenie VS może realizować wiele wersji w odniesieniu do Microsoft.VisualStudio. * Referencje?

Nie można załadować pliku lub zestawu „Microsoft.VisualStudio.Shell.12.0, Version = 12.0.0.0, culture = neutralnym, TokenKluczaPublicznego = b03f5f7f11d50a3a” lub jeden z jego zależnościami . System nie może odnaleźć określonego pliku.

  • widzę różne rozszerzenia przedstawieniu wielu wersji tej samej biblioteki:

    <Reference Include="Microsoft.VisualStudio.Shell.Interop" /> 
    <Reference Include="Microsoft.VisualStudio.Shell.Interop.8.0, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    <Reference Include="Microsoft.VisualStudio.Shell.Interop.9.0, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    
  • Inne zwolnić za rozszerzenie wersji VS.

  • Inną opcją, zgodnie z this article, jest dynamiczne ładowanie odpowiedniej wersji.

Chciałbym pomóc w naprawieniu tych rozszerzeń, ale jaki jest właściwy sposób rozwiązania tego problemu?

+1

Spójrz na PyTools (projekt Visual Studio), to rozwiązuje podobny problem dość elegancko. Mianowicie, musisz dołączyć poprawną bibliotekę DLL na podstawie twojej aktualnej wersji studyjnej. Robi się to dzięki sprytnym sztuczkom MSBuild. –

Odpowiedz

9

Tak Visual Studio zespoły referencyjne rozbić na kilka różnych kategorii, które powinny obsługiwać różnie w zależności od kategorii:

  • zespołów Interop: są to te, takie jak współdziałanie * zespoły ty. wymienione w pytaniu. Każdy zbiór interopów nie jest nowszą wersją "tej samej" rzeczy, ale raczej zespołem, który zawiera wszystkie interfejsy COM dodane w tej wersji programu Visual Studio. Odwoływanie się ze starszymi wersjami jest w porządku, po prostu nie odwołuj się do nowszej wersji niż najniższa wersja Visual Studio, którą chcesz ustawić jako docelową:
  • Złożenia edytora, Roslyn: Wszystko, co dotyczy edytora tekstu podstawowego (złożenia to Microsoft.VisualStudio.Text .Data, Microsoft.VisualStudio.Text.UI, Microsoft.VisualStudio.Text.UI.Wpf i Microsoft.VisualStudio.Editor) oraz Roslyn Visual Studio zawiera przekierowania zespołów, które przekierowują dowolną wersję, do której się odwołujesz, do wersji VS Ponownie uruchomione. Ponownie wybierz najniższą wersję, którą chcesz wspierać.
  • Microsoft.VisualStudio.Shell. [Version]: ten jeden bardzo dezorientuje ludzi. Sposób działania tego konkretnego zestawu dla każdej wersji programu Visual Studio, która jest dostarczana, jest tworzona nowa nazwa zespołu (z wersją w zespole). Następnie w przyszłych wersjach Visual Studio wysyłamy nowszą wersję zestawu, na który kierujesz. Ponownie, upewnij się, że kierujesz na Microsoft.VisualStudio.Shell. [Version] z najniższą wersją, którą zamierzasz obsługiwać.

Trudnym problemem jest to, że projektant aktualizacji VSSDK lubi ulepszać swoje projekty do nowszych wersji. Przywyknij do ręcznego edytowania plików MSBuild, aby upewnić się, że tego nie robi, lub zmień to, co już zrobiłeś. W przypadku ostatecznego systemu VSIX, który jest wysyłany do użytkowników, często najlepiej jest budować ze starszą wersją VS, aby upewnić się, że nie zbiera przypadkowo nowszych wersji. Jeśli chcesz użyć tylko nowszej wersji, musisz znaleźć pliki binarne VS ze starszej wersji, której chcesz użyć i sprawdzić je w systemie kontroli źródła, aby zapewnić, że starsze wersje są nadal pobierane. Przetestuj swój system VSIX, jeśli jedziesz tą trasą, ponieważ łatwo popełnić błąd i odwołać się do czegoś nowego przez przypadek.

+0

Nie stwierdziłem, że oświadczenie o zestawach edytora jest prawdziwe dla Microsoft.VisualStudio.TextTemplating. Wersji 10.0 nie można odwoływać się do VS2013 z mojego doświadczenia. Powoduje to dla mnie dodatkową pracę nad projektem. Dziwnie jednak mogę odwołać się do Microsoft.VisualStudio.TextTemplating.Interfaces.10.0 po prostu dobrze. –

+0

Chyba powinienem wyjaśnić, co mam na myśli przez "montaż edytora" - w tym przypadku rzeczy TextTemplating nie należą do tej kategorii. Ale nie mogę oczekiwać, że wiesz, co jest mniej więcej strukturą organizacyjną w Microsoft. Biorąc pod uwagę nazwę zespołu (tak naprawdę nie wiem więcej) możliwe jest, że zestaw Interfaces.10.0 zachowuje się w taki sam sposób jak zespoły współdziałania: ten zestaw zawiera to, co zostało dodane w VS2010. –

4

Napisałem artykuł omawiający różne zasady wersjonowania zespołów używane przez zespoły Visual Studio.

http://tunnelvisionlabs.github.io/vsbase/docs-master/html/edbfd3ce-43f4-4f3f-a90c-bc22bda19fae.htm

Ponadto deklaracje użycie zależność VSSDK.* NuGet packages pomóc zidentyfikować wersję (y) Visual Studio każde rozszerzenie może być używany z.

Szczególna wersja Microsoft.VisualStudio.Shell ty odwołuje to Zgromadzenie wersjonowanym (na poprzednim artykule) i zawarte w pakiecie VSSDK.Shell.12, z następującym opisem:

Ten pakiet Visual Studio " Shell "zestaw referencyjny używany przez Visual Studio 2013 i nowsze.

Aby łatwo kierować zarówno Visual Studio 2012 i Visual Studio 2013, należy Nuget zarządzać zależnościami VS SDK oraz zapewnić następujące warunki przytrzymanie:

  1. Upewnij się, że zespół nie ma uzależnienia od pakiet NuGet. Ta zależność oznacza, że ​​jeden lub więcej zestawów, do których odwołuje się twój projekt, działa tylko z Visual Studio 2013 i nowszymi.
  2. Upewnij się, że zespół nie ma uzależnienia od VSSDK.IDE.10Only, VSSDK.IDE.11Only lub VSSDK.IDE.12Only. Oznacza to, że pakiet odwołuje się do jednego lub więcej zespołów, które pracują tylko z określoną wersją programu Visual Studio.

Idealnie byłoby tylko chcesz zainstalować pakiety VSSDK Nuget które obejmują zarówno vs2012 i vs2013 tagi.

+0

To jest doskonałe i konieczne do opracowania rozszerzeń! Wielkie dzięki. Zrobiłem to dobrze do użytku z moim tytułem Zmień nazwę tytułu Visual Studio tutaj https://visualstudiogallery.msdn.microsoft.com/f3f23845-5b1e-4811-882f-60b7181fa6d6. –

Powiązane problemy