Jaki jest cel Microsoft.Net.Compilers?


83

Jakie jest znaczenie tego kompilatora? Czy to musi mieć, czy może się obejść bez? Jaki jest cel posiadania innego kompilatora, czy jest to tylko futurystyczny projekt? Przydałby się krótki przegląd.


2
Jest to również zależność Microsoft.CodeDom.Providers.DotNetCompilerPlatformw wersji 1.0.8 i niższych, więc możesz ją zobaczyć z tego powodu
KyleMit

1
Według Microsoft , Microsoft.Net.Compilersjest przestarzały na korzyść Microsoft.Net.Compilers.Toolset.
Uwe Keim

Odpowiedzi:


96

Celem pakietu Microsoft.Net.Compilers jest to, że kompilatory dystrybuowane z tym pakietem będą używane do kompilowania projektu, a nie kompilator dostarczany z .NET Framework lub Visual Studio. Najbardziej praktyczną bezpośrednią korzyścią jest to, że pozwala projektom korzystać z funkcji C # 6, a następnie umożliwia budowanie tych projektów w systemie, który nie ma zainstalowanego kompilatora C # 6, na przykład na serwerze ciągłej integracji, na którym nie ma Chcesz zainstalować pełną wersję Visual Studio 2015.


Muszę zrobić bardzo prostą rzecz, czyli skompilować dowolny plik .cs i wyemitować il, nie ma potrzeby sprawdzania poprawności odnośników zewnętrznych itp. Czy jest to możliwe z Microsoft.Net.Compilers?
Bandara

@Bandara Nie można skompilować C # bez odwołań zewnętrznych, z Microsoft.Net.Compilers lub bez niego. Na przykład zestawy, do których istnieją odniesienia, są potrzebne do rozwiązywania problemów. A jeśli masz odniesienia zewnętrzne, jest to technicznie możliwe dzięki Microsoft.Net.Compilers, ale jest to naprawdę niewłaściwe narzędzie do tego zadania. Uruchomiłbyś proces zewnętrzny, gdy ten sam kompilator jest już dostępny w innych pakietach w sposób, który możesz wywołać bezpośrednio we własnym programie.

Zobacz zaktualizowaną odpowiedź z @JaredPar (MS), ta odpowiedź nie jest już ważna. Chyba powinniśmy sprawdzić nasze rozwiązania i usunąć stare pakiety na rzecz budowania z aktualnym zestawem narzędzi VS / VSCode / SDK.
Tony Wall

17

Obecnie Microsoft.Net.Compilers nie ma żadnego celu. To jest pakiet NuGet, który jest przestarzały i przestanie być tworzony po Visual Studio 16,5. Istnieje pakiet będący następcą o nazwie Microsoft.Net.Compilers.Toolset. Ten pakiet ma prawie taką samą funkcjonalność jak Microsoft.Net.Compilers, ale działa zarówno z wystąpieniami .NET Desktop, jak i .NET Core MSBuild.

Mimo to Microsoft.Net.Compilers.Toolset nie jest przeznaczony do ogólnego użytku. Ten pakiet służy do dwóch konkretnych zastosowań:

  1. Działa jako narzędzie krótkoterminowe do odblokowywania klientów, którzy natrafili na błędy w kompilatorze. W przypadku takich klientów możemy użyć tego pakietu do odblokowania ich scenariuszy zaledwie godzinę po scaleniu poprawki z repozytorium Roslyn. Służy to jako pomost, dopóki poprawka nie trafi do skojarzonej wersji obsługi programu Visual Studio lub .NET SDK. W takim przypadku klient jest proszony o usunięcie pakietu ze swojego rozwiązania i poleganie na oficjalnie wydanych zestawach narzędzi.
  2. Służy jako mechanizm do przenoszenia plików binarnych między Roslyn a oficjalnymi wersjami pakietu .NET SDk.

Ten pakiet nie jest przeznaczony do ogólnego, długoterminowego użytku przez klientów. Rozumiem, że niektórzy klienci decydują się to zrobić, ale takie użycie również nie jest obsługiwane. Pakiet może i będzie regularnie powodować przerwy, przyjmując zależności od nowych wersji programu MSBuild lub zadań / obiektów docelowych w zestawie .NET SDK.

Klienci, którzy chcą używać nowych wersji kompilatora do swoich kompilacji, są zamiast tego zachęcani do korzystania z jednej z oficjalnych dystrybucji kompilatora:

  1. Użyj jednostki SKU narzędzi kompilacji programu Visual Studio.
  2. Użyj zestawu .NET SDK

Uwaga : pakiet Microsoft.Net.Compilers był oficjalnie obsługiwany jako część pakietu Microsoft.CodeDom.Providers.DotNetCompilerPlatform kilka lat temu, ponieważ był zależnością. Począwszy od wersji 2.0, chociaż zależność od Microsoft.Net.Compilers została usunięta i obecnie jest to całkowicie niezależny pakiet. Jednocześnie przeszliśmy do przestarzałego Microsoft.Net.Compilers, ponieważ nie ma już żadnych jawnych przypadków użycia dla niego.

Oznacza to, że niektórzy klienci nieoczekiwanie znajdują się w pliku projektu z Microsoft.Net.Compilers, ponieważ nie został on usunięty, gdy Microsoft.CodeDom.Providers.DotNetCompilerPlatform porzucił zależność. Rada dla takich klientów polega po prostu na usunięciu odniesienia do pakietu. Nie jest już potrzebne.


Bardzo ciekawy wgląd. Zastanawiam się, dlaczego aspekt dotyczący tylko krótkotrwałego użytkowania nie jest wspomniany w opisie pakietu NuGet
Jack Miller

@JackMiller Jest to wymienione w Microsoft.Net.Compilers.Toolset . `Ten pakiet jest przede wszystkim przeznaczony do szybkiego wysyłania poprawek do klientów. Używanie go jako długoterminowego rozwiązania zapewniającego nowsze kompilatory w starszych instalacjach programu MSBuild nie jest jawnie obsługiwane. To może i będzie się regularnie łamać. ”
Youssef13

6

Jest to pakiet, który zapewnia kompilatory C # i Visual Basic typu open source z interfejsami API do zaawansowanej analizy kodu.

Obszerną dokumentację można znaleźć na github:

https://github.com/dotnet/roslyn


5
Dzięki. Byłem już w oficjalnej dokumentacji, ale nadal uważam, że cel projektu jest niejasny.
przydatne Pejcz

2
@usefulBee Zasadniczo jest to wynikiem ruchu open source firmy Microsoft, sprawdź wikipedię, na przykład, aby uzyskać dodatkowe informacje: en.wikipedia.org/wiki/.NET_Compiler_Platform
ViRuSTriNiTy

1

Jak powiedzieli inni, zawiera kompilatory .NET dla C # i VB.NET.

Ciekawym aspektem tego, że jest to pakiet, jest to, że możesz określić konkretną kompilację kompilatora dla swojego projektu, w tym wersję, która nie została jeszcze dostarczona z programem Visual Studio.

Używamy tego w https://github.com/dotnet/project-system, który jest składnikiem open source programu Visual Studio. Pozwala nam to na używanie przedpremierowych wersji kompilatora do testowania funkcji języka, które nie są obsługiwane przez kompilator dostarczany z VS.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.