ทำไมรหัส C # 6 ของฉันไม่รวบรวมใน Unity


9

เหตุใด Unity จึงไม่สามารถทำงานกับรหัสC # 6 ได้ มันทำให้ฉันมีข้อผิดพลาดคอมไพเลอร์เสมอ นี่คือตัวอย่างรหัสบางส่วน:

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

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

ฉันใช้ Visual Studio เป็นเครื่องมือแก้ไขรหัสและสร้างโดยไม่มีข้อผิดพลาด ถ้าฉันกดเล่นด้วยความสามัคคีมันจะไม่สร้างขึ้น


ค้นหาunity .net profile upgradeใน Google
matth

คำตอบ:


18

Unity ใช้ Mono runtime เวอร์ชันเก่าซึ่งใช้. NET3.5 มันใช้บางสิ่งบางอย่างระหว่าง C # 3 และ 4 ในแง่ของคุณสมบัติ

ฉันพบสิ่งนี้โดย googling ไปรอบ ๆ ไม่แน่ใจว่าใช้งานได้หรือไม่ แต่อาจเป็นสิ่งที่ควรตรวจสอบ


เป็นที่น่าสังเกตว่ามีแผนในการอัปเกรดเป็น. NET โปรไฟล์ใหม่บางครั้งในอนาคต ( unity3d.com/unity/roadmap ) อย่างไรก็ตามจากข้อกำหนดเบื้องต้นที่ระบุไว้ในแผนงานเราจะเห็นว่าเกิดขึ้นเฉพาะในช่วงปลายปี 2559 ที่เร็วที่สุดซึ่งไม่น่าจะเกิดขึ้นจนกระทั่งในปี 2560
evilcandybag

7
ลิงก์ในคำตอบนี้หายไปและตอนนี้ส่งคืน 404 :(
ashes999

7
นี่คือเหตุผลที่ผู้คนไม่ควรโพสต์ลิงก์ใน stackexchange โดยไม่ต้องให้ข้อมูลสรุป
ฟิลิปป์

ต่อ ( forum.unity3d.com/threads/… ) เครื่องมือนั้นไม่ได้รับการพัฒนา / สนับสนุนอีกต่อไป อีกทางเลือกหนึ่งคือ ( bitbucket.org/alexzzzz/unity-c-5.0-and-6.0-integration/src ) ซึ่งฉันใช้เป็นการส่วนตัวแม้ว่ามันจะมีข้อบกพร่อง (เช่น Visual Studio ลืมเรื่องนี้) หรือมองไปที่ @BenAdams คำตอบ ด้านล่างสำหรับข่าวที่ดีกว่า
Khale_Kitha


4

วิดีโอนี้บน YouTube แสดงให้เห็นว่ามีใครบางคนสามารถรับไวยากรณ์ C # 6 ที่ทำงานกับ Unity ได้โดยการสร้างโครงการใหม่เปลี่ยนเป้าหมาย. Net Framework กลับเป็น 3.5 ตั้งค่าการสร้างและเผยแพร่ไดเรกทอรีไดเรกทอรีสินทรัพย์โครงการ Unity และเพิ่ม อ้างอิงถึง UnityEngine dll การดีบักดูเหมือนว่าจะทำงานเหมือนเดิม


2

คอมไพเลอร์ใน Visual Studio มีคุณสมบัติมากกว่าคอมไพเลอร์ใน Unity ซึ่งหมายความว่าบางรหัส (โดยเฉพาะอย่างยิ่งคุณสมบัติใหม่ c #) จะให้ข้อผิดพลาดใน Unity แต่ไม่ใช่ใน Visual Studio

อย่างไรก็ตามคุณสามารถเปลี่ยนกรอบงานเป้าหมายให้ตรงกับกรอบที่ใกล้เคียงกับที่ Unity ใช้ในโปรแกรมแก้ไขของคุณ ฉันทำสิ่งนี้ใน Xamarin เมื่อพัฒนาห้องสมุดสำหรับ Unity แต่ดูเหมือนว่าจะเป็นไปได้ใน Visual Studio เช่นกัน

ใน Visual Studio ในคุณสมบัติของโครงการ DLL ให้ตั้งค่าคุณสมบัติกรอบงานเป้าหมายเป็นรุ่น Unity Framework ที่คุณใช้ นี่คือไลบรารีของ Unity Base Class ที่ตรงกับความเข้ากันได้ของ API ที่เป้าหมายของโครงการของคุณเช่นไลบรารีของ Unity เต็ม, micro หรือเว็บเบส สิ่งนี้ป้องกันไม่ให้ DLL ของคุณเรียกวิธีเฟรมเวิร์กที่มีอยู่ในเฟรมเวิร์กอื่นหรือระดับความเข้ากันได้ แต่อาจไม่มีอยู่ในเวอร์ชัน Unity Framework ที่คุณใช้

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


คุณอาจต้องการชี้ให้เห็นว่าการใช้เฟรมเวิร์กเป้าหมายอื่นอาจทำให้เกิดปัญหาเมื่อสร้างแพลตฟอร์มอื่นที่ไม่ใช่ Windows
ฟิลิปป์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.