Яка мета Microsoft.Net.Compilers?


83

У чому важливість цього компілятора? Це треба мати або без чого можна обійтися? Яка мета мати ще один компілятор, чи це просто футуристичний проект? Короткий огляд буде вдячний.


2
Це також залежність від Microsoft.CodeDom.Providers.DotNetCompilerPlatformверсії 1.0.8 і нижче, тому ви можете бачити її саме з цієї причини
KyleMit

1
На думку Microsoft , Microsoft.Net.Compilersзастаріла на користь Microsoft.Net.Compilers.Toolset.
Уве Кейм,

Відповіді:


96

Суть пакета Microsoft.Net.Compilers полягає в тому, що компілятори, що розподіляються з цим пакетом, будуть використовуватися для компіляції вашого проекту, а не компілятор, що постачається з .NET Framework або Visual Studio. Найбільш практична пряма перевага полягає в тому, що це дозволяє вашим проектам використовувати функції C # 6, а потім дозволяє створювати ці проекти в системі, де не встановлений компілятор C # 6, наприклад, на сервері безперервної інтеграції, де ви цього не робите я не хочу встановити повну Visual Studio 2015.


Мені потрібно зробити дуже просту річ, а саме: скомпілювати будь-який файл .cs та видати il, не потрібно перевіряти зовнішні посилання тощо. Чи можливо це за допомогою Microsoft.Net.Compilers?
Бандара,

@Bandara Неможливо скомпілювати C # без зовнішніх посилань, із Microsoft.Net.Compilers або без них. Наприклад, посилання на збірки потрібні для вирішення проблем перевантаження, наприклад. І якщо у вас є зовнішні посилання, то це технічно можливо з Microsoft.Net.Compilers, але це насправді неправильний інструмент для роботи. Ви запустили б зовнішній процес, коли той самий компілятор вже доступний в інших пакетах таким чином, що ви можете зателефонувати у власну програму безпосередньо.

Дивіться оновлену відповідь від @JaredPar (MS), ця відповідь більше не діє. Думаємо, нам слід перевірити наші рішення та видалити старі пакети на користь створення за допомогою сучасного набору інструментів VS / VSCode / SDK.
Тоні Стіна,

16

На даний момент для Microsoft.Net.Compilers немає цілей. Це пакет NuGet, який застарів і припинить випуск після Visual Studio 16.5. Існує пакет-наступник Microsoft.Net.Compilers.Toolset. Цей пакет має майже ту ж функціональність, що і Microsoft.Net.Compilers, але працює як з екземплярами .NET Desktop, так і з .NET Core MSBuild.

Попри це Microsoft.Net.Compilers.Toolset не призначений для загального споживання. Цей пакет пропонує два конкретні цілі:

  1. Діє як короткостроковий транспортний засіб для розблокування клієнтів, які потрапляють у помилки компілятора. Для таких клієнтів ми можемо використовувати цей пакет, щоб розблокувати їхні сценарії приблизно через годину після того, як ми об’єднаємо виправлення у сховище Roslyn. Це служить мостом, доки виправлення не потрапить до відповідного випуску обслуговування Visual Studio або .NET SDK. Коли це трапляється, замовника просять видалити пакет зі свого рішення та покластися на офіційно випущені набори інструментів.
  2. Служить механізмом переміщення бінарних файлів між Roslyn та офіційними збірками .NET SDk.

Цей пакет не призначений для загального довгострокового споживання споживачами для їх складання. Я розумію, що деякі клієнти вирішили це зробити, але таке використання також не підтримується. Пакет може регулярно спричиняти перерви, беручи залежності від нових версій MSBuild або завдань / цілей у .NET SDK.

Клієнтам, які хочуть використовувати нові версії компілятора для своїх збірок, натомість рекомендується використовувати один з офіційних дистрибутивів компілятора:

  1. Використовуйте SKU Visual Studio Build Tools.
  2. Використовуйте .NET SDK

Примітка : Пакет Microsoft.Net.Compilers був офіційно підтриманий як частина пакета Microsoft.CodeDom.Providers.DotNetCompilerPlatform кілька років тому, оскільки це була залежність. Починаючи з версії 2.0, хоча залежність від Microsoft.Net.Compilers була видалена, і тепер вона виглядає як повністю незалежний пакет. У той же час ми перейшли до припинення Microsoft.Net.Compilers, оскільки для нього більше не існує явних випадків використання.

Це означає, що деякі клієнти несподівано опиняються з Microsoft.Net.Compilers у своєму проектному файлі, оскільки він не був видалений, коли Microsoft.CodeDom.Providers.DotNetCompilerPlatform скинув залежність. Порада для таких клієнтів полягає в тому, щоб просто видалити посилання на упаковку. Це вже не потрібно.


Дуже цікаве розуміння. Мені цікаво, чому аспект лише короткочасного використання не згадується в описі пакета NuGet
Джек Міллер,

@JackMiller Про це згадується в Microsoft.Net.Compilers.Toolset . `Цей пакет в основному призначений як метод швидкої доставки виправлень споживачам. Використання його як довгострокового рішення для надання нових компіляторів на старих установках MSBuild явно не підтримується. Це може і буде ламатися регулярно. '
Youssef13,

6

Це пакет, який надає компілятори з відкритим кодом C # та Visual Basic з розширеними API для аналізу коду.

Ви можете знайти велику документацію про github:

https://github.com/dotnet/roslyn


5
Дякую. Я вже ходив до офіційної документації, але все ще вважаю мету проекту неясною.
корисно Бджола

2
@usefulBee В основному це результат руху з відкритим кодом від Microsoft, перевірте, наприклад, додаткову інформацію у wikipedia: en.wikipedia.org/wiki/.NET_Compiler_Platform
ViRuSTriNiTy

1

Як вже говорили інші, він містить компілятори .NET для C # та VB.NET.

Цікавим аспектом цього пакету є те, що ви можете вказати конкретну збірку компілятора для вашого проекту, включаючи версію, яка ще не надіслана з Visual Studio.

Ми використовуємо це в https://github.com/dotnet/project-system, яка є компонентом Visual Studio з відкритим кодом. Це дозволяє нам використовувати попередні версії компілятора для функцій інтерфейсної мови, які не підтримуються компілятором, що постачається з VS.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.