คำถามติดแท็ก roslyn

Roslyn (aka .NET Compiler Platform) มีคอมไพเลอร์ C # และ Visual Basic แบบโอเพนซอร์สพร้อม API การวิเคราะห์โค้ดที่หลากหลาย เปิดใช้งานการสร้างเครื่องมือวิเคราะห์โค้ดด้วย API เดียวกับที่ Visual Studio ใช้

30
ไม่พบส่วนหนึ่งของเส้นทาง… bin \ roslyn \ csc.exe
ฉันพยายามเรียกใช้โครงการ Asp.net MVC ที่ดึงมาจากการควบคุมแหล่ง TFS ฉันได้เพิ่มการอ้างอิงการชุมนุมทั้งหมดและฉันสามารถสร้างและรวบรวมได้สำเร็จโดยไม่มีข้อผิดพลาดหรือคำเตือน แต่ฉันได้รับข้อผิดพลาดต่อไปนี้ในเบราว์เซอร์: ไม่พบส่วนหนึ่งของพา ธ 'C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe' นี่คือภาพเต็มหน้าจอของหน้าข้อผิดพลาด หลังจากการวิจัยไม่กี่วันฉันเข้าใจว่าRoslynเป็นแพลตฟอร์มคอมไพเลอร์. Net ที่มีคุณสมบัติการรวบรวมขั้นสูง อย่างไรก็ตามฉันไม่เข้าใจว่าทำไมบิลด์ของฉันจึงพยายามหา \ bin \ roslyn \ csc.exe เพราะฉันไม่ได้กำหนดค่าอะไรที่เกี่ยวข้องกับโรสลินหรือฉันตั้งใจจะใช้โรสลินในโครงการของฉัน
811 c#  asp.net  .net  asp.net-mvc  roslyn 

5
หน้าต่างโต้ตอบ C # สามารถโต้ตอบกับรหัสของฉันได้หรือไม่
ใน Visual Studio 2015 หรือใหม่กว่าฉันสามารถเปิด 'หน้าต่างโต้ตอบ C #' และเรียกใช้รหัส: > 5 + 3 8 นั้นน่ารัก. ตอนนี้ฉันจะโต้ตอบโค้ดของฉัน - ชั้นเรียนของฉันได้อย่างไร สมมติว่าฉันมีโครงการเปิดอยู่ > new Cog() (1,5): error CS0246: The type or namespace name 'Cog' could not be found (are you missing a using directive or an assembly reference?)
161 c#  .net  visual-studio  roslyn 

3
คอมไพเลอร์ C # เขียนด้วยภาษาใด?
ฉันดูซอร์สโค้ดที่http://referencesource.microsoft.com/และปรากฏว่าซอร์สโค้ดทั้งหมดอยู่ใน C # ฉันยังดูซอร์สโค้ดสำหรับแพลตฟอร์มคอมไพเลอร์ C # ใหม่ ( Roslyn ) และยังอยู่ใน C # เป็นไปได้อย่างไร? คอมไพเลอร์ภาษา C # เขียนเป็น C # หรือไม่ หรือฉันขาดอะไรบางอย่างที่ชัดเจน? ถ้าคอมไพเลอร์ C # เขียนใน C # แล้วมันทำงานอย่างไร

7
คุณลักษณะ C # 6.0 ไม่ทำงานกับ Visual Studio 2015
ฉันกำลังทดสอบ Visual Studio 2015 กับ C # 6.0 แต่ฟีเจอร์ภาษาไม่ทำงาน ในแอปพลิเคชันเว็บ MVC โค้ดต่อไปนี้จะรวบรวม: if (!string.IsNullOrWhiteSpace(Model.Profile?.TypeName)) { // More logic here... } อย่างไรก็ตามเมื่อฉันเรียกใช้แอปพลิเคชันผ่าน Debug และ IIS Express ฉันได้รับข้อผิดพลาดต่อไปนี้: CS1525: เงื่อนไขของนิพจน์ไม่ถูกต้อง "." ฉันจะเปิดใช้งานคุณสมบัติเหล่านี้ได้อย่างไร?

5
การสร้าง VS2015 ล้มเหลวโดยไม่มีข้อผิดพลาดกับ Dynamic
ฉันกำลังเขียนการทดสอบหน่วยในโค้ดที่ส่งคืน JSON ประเภทที่ส่งคืนเป็นชนิดไม่ระบุชื่อดังนั้นฉันคิดว่าจะตรวจสอบค่าที่อยู่บนมันฉันแค่โยนวัตถุไปที่ a dynamicเพื่อยืนยัน อย่างไรก็ตามเมื่อฉันทำอย่างนั้นงานสร้างของฉันล้มเหลว แต่ฉันไม่มีข้อความแสดงข้อผิดพลาด ฉันสามารถทำซ้ำสิ่งนี้ด้วยรหัสที่ง่ายมากในโครงการทดสอบหน่วยใหม่: [TestMethod] public void TestMethod1() { var obj = new { someValue = true }; dynamic asDynamic = obj; Assert.IsTrue(asDynamic.someValue); } ดูด้านล่างสำหรับสกรีนช็อตของบิลด์ที่ล้มเหลว งานสร้างสำเร็จเมื่อฉันพูดถึงการยืนยันว่า: ในทางตรงกันข้ามฉันรันโค้ดต่อไปนี้ใน LinqPad 5 เบต้า (ซึ่งใช้คอมไพเลอร์ Roslyn) และไม่มีปัญหา: var obj = new { someValue = true }; dynamic asDynamic = obj; …

1
Roslyn SyntaxNodes ถูกใช้ซ้ำหรือไม่
ฉันได้ดูRoslyn CTPแล้วและในขณะที่มันแก้ปัญหาที่คล้ายกันกับExpression tree APIทั้งสองไม่เปลี่ยนรูป แต่ Roslyn ทำในลักษณะที่แตกต่างกันมาก: Expression โหนดไม่มีการอ้างอิงไปยังโหนดหลักถูกแก้ไขโดยใช้ไฟล์ ExpressionVisitorและนั่นคือเหตุผลที่สามารถใช้ชิ้นส่วนขนาดใหญ่ซ้ำได้ SyntaxNodeอีกด้านหนึ่งของ Roslyn มีการอ้างอิงถึงพาเรนต์ดังนั้นโหนดทั้งหมดจึงกลายเป็นบล็อกที่ไม่สามารถใช้ซ้ำได้อย่างมีประสิทธิภาพ วิธีการเช่นUpdate, ReplaceNodeฯลฯ มีไว้เพื่อทำการแก้ไข เรื่องนี้จบลงที่ไหน? Document? Project? ISolution? API ส่งเสริมการเปลี่ยนแปลงทีละขั้นตอนของทรี (แทนที่จะเป็นปุ่มขึ้น) แต่แต่ละขั้นตอนทำสำเนาทั้งหมดหรือไม่ ทำไมพวกเขาถึงเลือกเช่นนั้น? มีเคล็ดลับที่น่าสนใจบางอย่างที่ฉันขาดหายไปหรือไม่?

2
nameof () ได้รับการประเมินตามเวลาคอมไพล์หรือไม่
ใน C # 6 คุณสามารถใช้ตัวnameof()ดำเนินการเพื่อรับสตริงที่มีชื่อของตัวแปรหรือประเภท สิ่งนี้ได้รับการประเมินในเวลาคอมไพล์หรือรันไทม์ผ่าน Roslyn API บางตัว?
114 c#  roslyn  c#-6.0 

4
Microsoft Roslyn กับ CodeDom
จากข่าวประชาสัมพันธ์เมื่อวานนี้ใน InfoWorld เกี่ยวกับMicrosoft Roslynใหม่: ข้อได้เปรียบที่ชัดเจนที่สุดของคอมไพเลอร์ "แยกโครงสร้าง" ประเภทนี้คืออนุญาตให้เรียกกระบวนการคอมไพล์ - รันทั้งหมดจากภายในแอปพลิเคชัน. Net Hejlsberg แสดงให้เห็นถึงโปรแกรม C # ที่ส่งผ่านข้อมูลโค้ดบางส่วนไปยังคอมไพเลอร์ C # เป็นสตริง คอมไพลเลอร์ส่งคืนรหัสแอสเซมบลี IL ที่เป็นผลลัพธ์เป็นอ็อบเจ็กต์ซึ่งจะถูกส่งไปยัง Common Language Runtime (CLR) เพื่อดำเนินการ โวล่า! ด้วย Roslyn C # จะเพิ่มความสามารถของภาษาแบบไดนามิกในการสร้างและเรียกใช้โค้ดในขณะรันไทม์ ฉันสามารถทำได้ตั้งแต่เปิดตัว. NET 4 CSharpCodeProvider.CompileAssemblyFromSourceซึ่งจริงๆแล้วฉันใช้ในโครงการ ASP.Net ที่เขียนเมื่อสักครู่ที่ทำเช่นนั้น - อนุญาตให้ผู้ใช้พิมพ์รหัสลงในกล่องข้อความเลือกแอสเซมบลี / เนมสเปซ เพื่ออ้างอิงจากนั้นดำเนินการและแสดงผลลัพธ์จากโค้ดนั้นได้ทันทีสำหรับการทดสอบโค้ดสภาพแวดล้อมแบบสดบน Windows Azure เป็นCodeDomส่วนหนึ่งของ / เป็นสารตั้งต้นของ Roslyn หรือไม่? …
111 .net  codedom  roslyn 

3
จะอัพเกรด msbuild เป็น C # 6 ได้อย่างไร?
ฉันต้องการใช้ C # 6 ในโปรเจ็กต์ของฉัน (การขยายสัญญาณว่างคุณสมบัติอื่น ๆ ) ฉันได้ติดตั้ง VS 2015 บนพีซีของฉันแล้วและมันทำงานได้ยอดเยี่ยมและสร้างรหัสทดสอบเช่น var user = new SingleUserModel(); //all model fields are null var test = user.User?.Avatar?["blah"]; แต่เมื่อผมได้ผลักดันโครงการของฉันที่จะซื้อคืนและ CI ?เริ่มที่จะสร้างมันสร้างล้มเหลวเนื่องจากการได้รับการสนับสนุน ฉันได้ติดตั้ง VS2015 บนเซิร์ฟเวอร์ CI แล้ว แต่ก็เหมือนจะไม่ได้ใช้งาน ฉันจะทำอะไรได้บ้าง? CI - CruiseControl .NET สร้างด้วย C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

5
ใช้ System.Dynamic ใน Roslyn
ฉันแก้ไขตัวอย่างที่มาพร้อมกับ Roslyn เวอร์ชันใหม่ที่เปิดตัวเมื่อวานนี้เพื่อใช้ไดนามิกและ ExpandoObject แต่ฉันได้รับข้อผิดพลาดของคอมไพเลอร์ซึ่งฉันไม่แน่ใจว่าจะแก้ไขอย่างไร ข้อผิดพลาดคือ: (7,21): ข้อผิดพลาด CS0656: ไม่มีสมาชิกที่ต้องการของคอมไพเลอร์ 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create' คุณยังไม่สามารถใช้ dynamics ในคอมไพเลอร์ใหม่ได้หรือไม่? ฉันจะแก้ไขปัญหานี้ได้อย่างไร? นี่คือตัวอย่างที่ฉันอัปเดต: [TestMethod] public void EndToEndCompileAndRun() { var text = @"using System.Dynamic; public class Calculator { public static object Evaluate() { dynamic x = new ExpandoObject(); x.Result = 42; return x.Result; } }"; var tree = …
96 c#  roslyn 

4
Roslyn รวบรวมโค้ดไม่สำเร็จ
หลังจากที่ฉันย้ายโปรเจ็กต์ของฉันจาก VS2013 เป็น VS2015 โปรเจ็กต์จะไม่สร้างอีกต่อไป ข้อผิดพลาดในการคอมไพล์เกิดขึ้นในคำสั่ง LINQ ต่อไปนี้: static void Main(string[] args) { decimal a, b; IEnumerable<dynamic> array = new string[] { "10", "20", "30" }; var result = (from v in array where decimal.TryParse(v, out a) && decimal.TryParse("15", out b) && a <= b // Error here orderby decimal.Parse(v) …
95 c#  .net  linq  roslyn 

6
เผยแพร่เว็บไซต์โดยไม่มี roslyn
ฉันพยายามสร้างเว็บแอปพลิเคชันโดยใช้ Visual Studio 2015 และ. NET 4.5.1 roslynเมื่อฉันเผยแพร่เว็บไซต์ที่สตูดิโอภาพสร้างชื่อโฟลเดอร์ ฉันรู้ว่ามันใช้เพื่อคอมไพล์โค้ดได้ทันที แต่น่าเสียดายที่ผู้ให้บริการโฮสติ้งของฉันไม่อนุญาตให้ฉันรันคอมไพเลอร์บนเซิร์ฟเวอร์ของพวกเขา จะเผยแพร่เว็บไซต์โดยไม่roslynเหมือนกับ Visual Studio เวอร์ชันก่อนหน้าได้อย่างไร แก้ไข: ฉันได้รับข้อผิดพลาดนี้เมื่อพยายามเข้าถึงเว็บไซต์ของฉัน ดูเหมือนว่า IIS พยายามดำเนินการroslyn\csc.exeแต่บัญชีผู้ใช้ของฉันไม่ได้รับอนุญาตให้ทำเช่นนั้น ด้วย Visual Studio เวอร์ชันก่อนหน้าข้อผิดพลาดนี้จะไม่ปรากฏขึ้น

2
เหตุใดจึงมีคลาส async state ของเครื่อง (และไม่ใช่โครงสร้าง) ใน Roslyn
ลองพิจารณาวิธีการ async ที่ง่ายมากนี้: static async Task myMethodAsync() { await Task.Delay(500); } เมื่อฉันรวบรวมสิ่งนี้ด้วย VS2013 (คอมไพเลอร์ก่อน Roslyn) สถานะเครื่องที่สร้างขึ้นจะเป็นโครงสร้าง private struct <myMethodAsync>d__0 : IAsyncStateMachine { ... void IAsyncStateMachine.MoveNext() { ... } } เมื่อฉันรวบรวมด้วย VS2015 (Roslyn) รหัสที่สร้างขึ้นคือ: private sealed class <myMethodAsync>d__1 : IAsyncStateMachine { ... void IAsyncStateMachine.MoveNext() { ... } } อย่างที่คุณเห็น Roslyn สร้างคลาส …

3
C # พฤติกรรมล้นสำหรับ uint ไม่ จำกัด
ฉันทดสอบโค้ดนี้ที่https://dotnetfiddle.net/ : using System; public class Program { const float scale = 64 * 1024; public static void Main() { Console.WriteLine(unchecked((uint)(ulong)(1.2 * scale * scale + 1.5 * scale))); Console.WriteLine(unchecked((uint)(ulong)(scale* scale + 7))); } } ถ้าฉันรวบรวมด้วย. NET 4.7.2 ฉันจะได้รับ 859091763 7 แต่ถ้าฉันทำ Roslyn หรือ. NET Core ฉันจะได้รับ 859091763 0 ทำไมสิ่งนี้ถึงเกิดขึ้น
10 c#  .net  overflow  roslyn  uint 

2
ทำไมเราถึงได้เป็นไปได้ dereference คำเตือนอ้างอิงโมฆะเมื่อการอ้างอิงโมฆะดูเหมือนจะเป็นไปไม่ได้?
เมื่ออ่านคำถามนี้ทาง HNQ ฉันได้อ่านเกี่ยวกับประเภทข้อมูลอ้างอิงที่น่าเบื่อใน C # 8และทำการทดลองบางอย่าง ฉันรู้ว่า 9 ครั้งใน 10 ครั้งหรือบ่อยกว่านั้นเมื่อมีคนพูดว่า "ฉันพบข้อผิดพลาดในการคอมไพเลอร์!" นี่คือการออกแบบและความเข้าใจผิดของพวกเขาเอง และตั้งแต่ฉันเริ่มมองหาคุณลักษณะนี้เฉพาะในวันนี้อย่างชัดเจนฉันไม่เข้าใจมันมากนัก ด้วยวิธีนี้ให้ดูที่รหัสนี้: #nullable enable class Program { static void Main() { var s = ""; var b = s == null; // If you comment this line out, the warning on the line below disappears var i …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.