2017-05-01 51 views
13

Pracuję nad utworzeniem niestandardowego rozszerzenia zasad programu Visual Studio 2017. Moje obecne rozwiązanie jest skonstruowany w następujący sposób:Jak dołączyć złożenia z pakietów NuGet do instalatora VSIX?

VSIX Solution Structure

Uwaga: Biorę wykorzystać nową Nuget PackageReference podejścia, dlatego nie ma pliku packages.config.


Wierzę mam setup mój VSIX oczywistego odpowiednio ponieważ wszystko działa idealnie, kiedy nie odwoływać Microsoft.Net.Http (pierwotnie byłem ciężko kodowania wartości zamiast pobierania wartości). Nie jestem pewien, dlaczego dołączony pakiet NuGet Microsoft.TeamFoundationServer.ExtendedClient nie powoduje żadnych problemów, natomiast pakiet NuGet Microsoft.Net.Http.

Spojrzałem na folder debugowania, aby zobaczyć, co jest kompilowane i widzę, jak każdy niezbędny zestaw jest wciągany, jednak jeśli rozpakuję VSIX (zmieniłem nazwę na * .zip i rozpakowałem go), tylko zespół projektu jest w zestawie; zespoły referencyjne Nuget nie są spakowane w pakiecie VSIX.

natknąłem się kilka zasobów, ale nic nie wydaje się działać:

Każdy jeden z tych pytań/odpowiedzi nie wydaje się, aby rozwiązać mój konkretny problem.


Aktualizacja:

uważam, że jest to możliwe, że narzędzie wykorzystywane do generowania pakietu VSIX nie obsługuje nową PackageReference cechę Nuget. Jeśli korzystam ze starszej funkcji packages.config, wszystko działa poprawnie. Wstawiłem UserVoice Ticket w celu obsługi nowej funkcji NuGet.

+0

mogę przyjść późno, ale ten wątek rozwiązać mój problem: https: // stackoverflow. com/questions/42201923/vsix-extension-how-can-i-ensure-a-reference-dll-or-assembly-is-included-in-th –

+0

@ AmauryLevé: To pytanie mogło rozwiązać twój problem, ale jest całkowicie niezwiązane z problemem, do którego się odwoływałem, co miało związek z pakownikiem VSIX automatycznie zawiera złożenia za pomocą funkcji PackageReference NuGeta. To pytanie/odpowiedź dotyczy dodawania zasobów przez bezpośrednie odwoływanie się do złożeń. –

Odpowiedz

1

udało mi się z powodzeniem zawierać pakiety Nuget w szablonie, wykonując czynności opisane w poniższym poradniku Microsoft: Packages in Visual Studio templates

SDK, które są instalowane przy użyciu MSI można zainstalować pakiety Nuget bezpośrednio na komputerze programisty. Dzięki temu są one natychmiast dostępne, gdy używany jest szablon lub szablon przedmiotu, zamiast konieczności ich wyodrębniania w tym czasie. Szablony ASP.NET wykorzystują to podejście.

Widziałem, jak inni doświadczali problemów z powodu pakietów NuGet, z których korzystają. Dla .NET Core użyłem Microsoft.Net.Http, chociaż wymaga to Microsoft.BCL. Jeśli nie występują problemy, sugeruję pozostawienie dotychczasowych systemów bez zmian, zwłaszcza, że ​​te przestrzenie wydają się być ruchomymi obiektami docelowymi.

Wygląda na to, że System.Net.Http jest prawidłowym wyborem, przynajmniej dla .NET na platformie Windows. Nie ma też żadnej wartości, że ten pakiet nie ma zewnętrznych zależności.


EDIT: Wydaje się to może być związane z samą PackageReference błędów. Widzę podobny udokumentowany błąd opisany here.

+0

Myślę, że źle zrozumiałeś problem, który mam. Nie tworzę szablonów przedmiotów ani projektów, ale zamiast tego stosuję niestandardowe zasady dotyczące odprawy. Problemem, który napotkam, jest to, że wygenerowany pakiet VSIX nie zawierał zespołów NuGet, od których zależał mój zestaw. Link, do którego się odwołujesz, polega na zapewnieniu, że szablony elementów/projektów automatycznie pobierają pakiety NuGet do projektu, który korzysta z tych szablonów. Ponadto problem koncentruje się wokół nowej funkcji PackageReference w NuGet. Wszystko działa dobrze, jeśli korzystam z metody packages.config z NuGet zamiast: –

+0

Po prostu z ciekawości, czy istnieje powód, dla którego chcesz/potrzebujesz użyć funkcji PackageReference w NuGet? – lax1089

+1

Tak, http://blog.nuget.org/20170316/NuGet-now-nie-integrowane-into-MSBuild.html - w zasadzie ma wiele zalet i jest przyszłością NuGet. –

0

Dla tych biednych ludzi, takich jak my, którzy zmagają się z tym problemem (kombinacja nuget + vsix + netstandard + vs jest bardziej niebezpieczna każdego dnia), znalazłem obejście inspirowane tym wpisem: NuGet packages referenced via PackageReference don't include DLLs in VSIX. Na przykład tutaj, ja referencyjnej 4 pakiety Nuget ręcznie:

<Target Name="IncludeNuGetPackageReferences" AfterTargets="GetVsixSourceItems"> 
    <ItemGroup> 
    <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'Microsoft.Win32.Registry'" /> 
    <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'System.CodeDom'" /> 
    <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'System.Configuration.ConfigurationManager'" /> 
    <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'System.ServiceProcess.ServiceController'" /> 
    </ItemGroup> 
</Target> 

PS: Używam Visual Studio 15.5.4