Mục đích của Microsoft.Net.Compilers là gì?


83

Tầm quan trọng của trình biên dịch này là gì? Nó là phải có hoặc có thể làm mà không có? Dù sao thì mục đích của việc có một trình biên dịch khác là gì, hay đó chỉ là một dự án tương lai? Một tổng quan ngắn gọn sẽ được đánh giá cao.


2
Nó cũng là một sự phụ thuộc của Microsoft.CodeDom.Providers.DotNetCompilerPlatformtrong v1.0.8 và dưới, do đó bạn có thể nhìn thấy nó vì lý do đó
KyleMit

1
Theo Microsoft , Microsoft.Net.Compilerskhông được ủng hộ Microsoft.Net.Compilers.Toolset.
Uwe Keim

Câu trả lời:


96

Điểm của gói Microsoft.Net.Compilers là các trình biên dịch được phân phối cùng với gói đó sẽ được sử dụng để biên dịch dự án của bạn, thay vì trình biên dịch đi kèm với .NET Framework hoặc với Visual Studio. Lợi ích trực tiếp thiết thực nhất là nó cho phép các dự án của bạn sử dụng các tính năng C # 6 và sau đó cho phép các dự án đó được xây dựng trên một hệ thống không được cài đặt trình biên dịch C # 6, chẳng hạn như trên một máy chủ tích hợp liên tục mà bạn không ' t muốn cài đặt Visual Studio 2015 đầy đủ.


Tôi cần làm một việc rất đơn giản, đó là biên dịch bất kỳ tệp .cs nào và phát ra il, Không cần xác thực các tham chiếu bên ngoài, v.v. Có thể với Microsoft.Net.Compilers không?
Bandara

@Bandara Không thể biên dịch C # mà không có tham chiếu bên ngoài, có hoặc không có Microsoft.Net.Compilers. Ví dụ, các hội đồng tham chiếu là cần thiết để giải quyết quá tải. Và nếu bạn có các tham chiếu bên ngoài, thì về mặt kỹ thuật, nó có thể thực hiện được với Microsoft.Net.Compilers, nhưng nó thực sự là công cụ sai cho công việc. Bạn sẽ khởi chạy một quy trình bên ngoài khi trình biên dịch tương tự đã có sẵn trong các gói khác theo cách mà bạn có thể gọi trực tiếp trong chương trình của riêng mình.

Xem câu trả lời được cập nhật từ @JaredPar (MS), câu trả lời này không còn hợp lệ. Đoán rằng chúng ta nên kiểm tra các giải pháp của mình và xóa các gói cũ để có lợi cho việc xây dựng bộ công cụ VS / VSCode / SDK cập nhật.
Tony Wall

16

Hiện tại, không có mục đích nào đối với Microsoft.Net.Compilers. Đây là gói NuGet không được dùng nữa và sẽ ngừng được sản xuất sau Visual Studio 16.5. Có một gói kế nhiệm có tên Microsoft.Net.Compilers.Toolset. Gói này có nhiều chức năng giống như Microsoft.Net.Compilers nhưng hoạt động với cả phiên bản .NET Desktop và .NET Core MSBuild.

Mặc dù vậy Microsoft.Net.Compilers.Toolset không dành cho mục đích tiêu dùng chung. Gói này phục vụ hai mục đích sử dụng cụ thể:

  1. Hoạt động như một phương tiện ngắn hạn để bỏ chặn những khách hàng gặp phải lỗi sự cố trong trình biên dịch. Đối với những khách hàng như vậy, chúng tôi có thể sử dụng gói này để bỏ chặn các tình huống của họ chỉ một giờ hoặc lâu hơn sau khi chúng tôi hợp nhất bản sửa lỗi vào kho lưu trữ Roslyn. Điều này đóng vai trò là cầu nối cho đến khi bản sửa lỗi được đưa vào bản phát hành phục vụ Visual Studio hoặc .NET SDK được liên kết. Khi điều đó xảy ra, khách hàng được yêu cầu xóa gói khỏi giải pháp của họ và dựa vào các bộ công cụ được phát hành chính thức.
  2. Đóng vai trò như một cơ chế để di chuyển các tệp nhị phân giữa Roslyn và các bản dựng chính thức của .NET SDk.

Gói này không dành cho khách hàng sử dụng lâu dài cho công trình của họ. Tôi hiểu rằng một số khách hàng chọn làm điều này nhưng việc sử dụng như vậy cũng không được hỗ trợ. Gói có thể và sẽ thường xuyên gây ra sự cố bằng cách sử dụng các phụ thuộc vào các phiên bản mới của MSBuild hoặc các nhiệm vụ / mục tiêu trong .NET SDK.

Thay vào đó, những khách hàng muốn sử dụng các phiên bản mới của trình biên dịch cho các bản dựng của họ được khuyến khích sử dụng một trong các bản phân phối chính thức của trình biên dịch:

  1. Sử dụng SKU Công cụ Xây dựng Visual Studio.
  2. Sử dụng SDK .NET

Lưu ý : gói Microsoft.Net.Compilers chính thức được hỗ trợ như một phần của gói Microsoft.CodeDom.Providers.DotNetCompilerPlatform vài năm trước vì nó là một phần phụ thuộc. Bắt đầu từ phiên bản 2.0 mặc dù sự phụ thuộc vào Microsoft.Net.Compilers đã bị loại bỏ và bây giờ nó đứng như một gói hoàn toàn độc lập. Đồng thời, chúng tôi đã chuyển sang không dùng nữa Microsoft.Net.Compilers vì không còn bất kỳ trường hợp sử dụng rõ ràng nào cho nó nữa.

Điều này có nghĩa là một số khách hàng bất ngờ thấy mình có Microsoft.Net.Compilers trong tệp dự án của họ vì nó không bị xóa khi Microsoft.CodeDom.Providers.DotNetCompilerPlatform bỏ phần phụ thuộc. Lời khuyên cho những khách hàng như vậy là chỉ cần xóa tham chiếu đến gói. Nó không cần thiết nữa.


Cái nhìn sâu sắc rất thú vị. Tôi tự hỏi tại sao khía cạnh chỉ sử dụng ngắn hạn không được đề cập trong phần mô tả của gói NuGet
Jack Miller

@JackMiller Điều đó được đề cập trong Microsoft.Net.Compilers.Toolset . Gói này chủ yếu nhằm mục đích là một phương pháp để vận chuyển nhanh chóng các hotfix cho khách hàng. Sử dụng nó như một giải pháp lâu dài để cung cấp các trình biên dịch mới hơn trên các cài đặt MSBuild cũ hơn rõ ràng không được hỗ trợ. Điều đó có thể và sẽ phá vỡ một cách thường xuyên. '
Youssef 13

6

Đó là một gói cung cấp các trình biên dịch C # và Visual Basic mã nguồn mở với các API phân tích mã phong phú.

Bạn có thể tìm thấy tài liệu mở rộng trên github:

https://github.com/dotnet/roslyn


5
Cảm ơn. Tôi đã xem tài liệu chính thức trước đây nhưng vẫn thấy mục đích của dự án mơ hồ.
hữu íchXem

2
@usefulBee Về cơ bản nó là kết quả của phong trào nguồn mở từ Microsoft, kiểm tra wikipedia ví dụ để biết thêm: en.wikipedia.org/wiki/.NET_Compiler_Platform
ViRuSTriNiTy

1

Như những người khác đã nói, nó chứa các trình biên dịch .NET cho C # và VB.NET.

Một khía cạnh thú vị của việc này là một gói là bạn có thể chỉ định một bản dựng cụ thể của trình biên dịch cho dự án của mình, bao gồm cả phiên bản chưa được xuất xưởng cùng với Visual Studio.

Chúng tôi sử dụng điều này trong https://github.com/dotnet/project-system , một thành phần mã nguồn mở của Visual Studio. Nó cho phép chúng tôi sử dụng các phiên bản phát hành trước của trình biên dịch cho các tính năng ngôn ngữ dogfood không được hỗ trợ bởi trình biên dịch đi kèm với VS.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.