Tại sao mã C # 6 của tôi không được biên dịch trong Unity?


9

Tại sao Unity không thể làm việc với mã C # 6 ? Nó luôn cho tôi lỗi biên dịch. Dưới đây là một số ví dụ mã:

using static System.Convert;
using static System.Environment;

$"€{punten}{NewLine}€{Money}{NewLine}€{KilledEnemies}{NewLine}€{bonus}{NewLine}€{total}";

Tôi sử dụng Visual Studio làm trình chỉnh sửa mã của mình và không có lỗi. Nếu tôi nhấn play trong Unity thì nó sẽ không được xây dựng.


Tìm kiếm unity .net profile upgradetrên Google
matth

Câu trả lời:


18

Unity sử dụng một phiên bản cũ của thời gian chạy Mono dựa trên .NET3.5. Nó sử dụng một cái gì đó giữa C # 3 và 4 về các tính năng.

Tôi tìm thấy điều này bằng cách googling xung quanh. Không chắc chắn nếu nó hoạt động nhưng có thể là một cái gì đó đáng để điều tra.


Điều đáng chú ý là có kế hoạch nâng cấp lên cấu hình .NET mới hơn trong tương lai ( unity3d.com/unity/roadmap ). Tuy nhiên, với các điều kiện tiên quyết được nêu trong lộ trình, chúng ta sẽ thấy điều đó chỉ xảy ra vào cuối năm 2016 sớm nhất, rất có thể là cho đến khoảng năm 2017.
evilcandybag

7
Liên kết trong câu trả lời này đã bị
hủy

7
Đây là lý do tại sao mọi người không nên đăng liên kết trên stackexchange mà không cung cấp tóm tắt.
Philipp

Per ( forum.unity3d.com/threads/ trên ) công cụ đó không còn được phát triển / hỗ trợ. Một cách khác là ( bitbucket.org/alexzzzz/unity-c-5.0-and-6.0-integration/src ), mà tôi sử dụng cá nhân, mặc dù nó có sai sót (như Visual Studio quên về nó), hoặc xem câu trả lời của @BenAdams , bên dưới, để biết tin tức tốt hơn.
Khale_Kitha


4

Video này trên YouTube cho thấy cách ai đó có thể khiến cú pháp C # 6 hoạt động trên Unity bằng cách tạo dự án mới, thay đổi mục tiêu .Net Framework trở lại 3.5, đặt thư mục đầu ra và xây dựng vào thư mục tài sản dự án Unity và thêm tham chiếu đến dll UnityEngine. Gỡ lỗi dường như hoạt động như nhau.


2

Trình biên dịch trong Visual Studio có nhiều tính năng hơn trình biên dịch trong Unity, điều đó có nghĩa là một số mã (đặc biệt là các tính năng c # mới hơn) sẽ báo lỗi trong Unity, nhưng không có trong Visual Studio.

Tuy nhiên, bạn có thể thay đổi khung mục tiêu của mình để khớp với khung gần nhất với những gì Unity sử dụng trong trình chỉnh sửa của bạn. Tôi đã thực hiện điều này trong Xamarin khi phát triển thư viện cho Unity, nhưng có vẻ như nó cũng có thể có trong Visual Studio.

Trong Visual Studio, trong các thuộc tính của dự án DLL, đặt thuộc tính khung Target thành phiên bản khung Unity bạn đang sử dụng. Đây là Thư viện lớp cơ sở Unity phù hợp với khả năng tương thích API mà dự án của bạn nhắm đến, chẳng hạn như thư viện lớp cơ sở toàn bộ, vi mô hoặc web. Điều này ngăn DLL của bạn gọi các phương thức khung tồn tại trong các khung hoặc mức độ tương thích khác, nhưng có thể không tồn tại trong phiên bản khung Unity mà bạn đang sử dụng.

https://msdn.microsoft.com/en-us/l Library / dn940020.aspx


Bạn có thể muốn chỉ ra rằng việc sử dụng khung mục tiêu khác có thể gây ra sự cố khi xây dựng cho các nền tảng khác ngoài Windows.
Philipp
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.