คำถามติดแท็ก .net-standard

12
ข้อแตกต่างระหว่างประเภทโครงการ. NET Core และ. NET Class Class Library คืออะไร
ใน Visual Studio มีไลบรารีคลาสต่าง ๆ อย่างน้อย 3 ชนิดที่คุณสามารถสร้างได้: ไลบรารีคลาส (.NET Framework) ไลบรารีคลาส (มาตรฐาน. NET) ไลบรารีคลาส (. NET Core) ในขณะที่สิ่งแรกคือสิ่งที่เราใช้มานานหลายปีความสับสนที่สำคัญที่ฉันมีคือเมื่อใช้ประเภทไลบรารีคลาส. NET Standard และ. NET Core ฉันได้รับการกัดโดยเมื่อเร็ว ๆ นี้เมื่อพยายามหลายเป้าหมายรุ่นกรอบที่แตกต่างกันและการสร้างโครงการทดสอบหน่วย ดังนั้นอะไรคือความแตกต่างระหว่างClass Library (. NET Standard)และClass Library (.NET Core)ทำไมทั้งคู่จึงมีอยู่และเมื่อใดเราจึงควรใช้อันอื่น

7
.NET Standard vs .NET Core
ฉันได้อ่านเกี่ยวกับความแตกต่างระหว่าง. NET Standard และ. NET Core แต่ฉันไม่รู้จริง ๆ ว่าความแตกต่างคืออะไรหรือเมื่อใดที่จะเลือกโครงการไลบรารี. NET Standard และเมื่อใดควรเลือกโครงการไลบรารี. NET Core ฉันได้อ่านแล้วว่า. NET Standard นั้นเพื่อให้แน่ใจว่าชุดของ API นั้นพร้อมใช้งานเสมอไม่ว่าจะใช้แพลตฟอร์มใด (ตราบเท่าที่แพลตฟอร์มนั้นเข้ากันได้กับเวอร์ชัน. NET Standard ที่ฉันเลือก) ถ้าฉันไม่เข้าใจผิดนี่หมายความว่าฉันสามารถสร้างไลบรารีคลาสของ. NET Standard แล้วใช้บนแพลตฟอร์มใด ๆ ที่เข้ากันได้กับรุ่น. NET Standard ที่ฉันเลือกไว้ ด้วย. NET Core ฉันได้อ่านว่ามันมีไว้สำหรับการใช้ข้ามแพลตฟอร์มเช่นกันดังนั้นถ้าฉันเลือกไลบรารี. NET Core ดูเหมือนว่าฉันสามารถใช้กับแพลตฟอร์มหลาย ๆ แบบได้เช่นเดียวกับ. NET Standard ดังนั้นในตอนท้ายฉันไม่เห็นความแตกต่าง ฉันควรใช้อันไหน ความแตกต่างระหว่างพวกเขาคืออะไร?

5
หน่วยทดสอบวิธีการภายในใน VS2017 .Net Standard library
ฉันกำลังเล่นกับผู้สมัคร Release Studio 2017 ล่าสุดโดยสร้างไลบรารี. Net Standard 1.6 ฉันใช้ xUnit เพื่อทดสอบโค้ดของฉันและสงสัยว่าคุณยังสามารถทดสอบวิธีการภายในใน VS2017 ได้หรือไม่ ฉันจำได้ว่าคุณสามารถคลาส AssemblyInfo.cs บรรทัดทั้งหมดใน VS2015 ที่จะเปิดใช้งานโครงการที่ระบุเพื่อดูวิธีการภายใน [assembly:InternalsVisibleTo("MyTests")] เนื่องจากไม่มี AssemblyInfo.cs class ใน VS2017 .Net Standard project ฉันสงสัยว่าคุณยังสามารถทดสอบวิธีการภายในหน่วยได้หรือไม่?

5
ConfigurationManager.AppSettings มีอยู่ใน. NET Core 2.0 หรือไม่
ฉันมีวิธีที่อ่านการตั้งค่าจากไฟล์ปรับแต่งของฉันดังนี้: var value = ConfigurationManager.AppSettings[key]; มันรวบรวมได้ดีเมื่อกำหนดเป้าหมาย. NET Standard 2.0 เท่านั้น ตอนนี้ฉันต้องการเป้าหมายหลายเป้าหมายดังนั้นฉันจึงอัปเดตไฟล์โครงการด้วย: <TargetFrameworks>netcoreapp2.0;net461;netstandard2.0</TargetFrameworks> แต่ตอนนี้การรวบรวมล้มเหลวnetcoreapp2.0ด้วยข้อความแสดงข้อผิดพลาดต่อไปนี้: Error CS0103 The name 'ConfigurationManager' does not exist in the current context (netcoreapp2.0) แยกกันฉันสร้าง .NET หลัก 2.0 คอนโซลแอพลิเคชันใหม่ (เฉพาะการกำหนดเป้าหมายหลัก .NET 2.0 ในครั้งนี้) แต่ในทำนองเดียวกันดูเหมือนว่าจะไม่ConfigurationManagerอยู่ภายใต้การ System.Configurationnamespace ฉันค่อนข้างสับสนเพราะมันมีอยู่ภายใต้. NET Standard 2.0 ดังนั้นฉันคาดว่ามันจะพร้อมใช้งานใน. NET Core 2.0 เนื่องจาก. NET Core 2.0 นั้นสอดคล้องกับ. …

3
C # 8 รองรับ. NET Framework หรือไม่
ในการตั้งค่าการสร้างขั้นสูงของ Visual Studio 2019 C # 8 ดูเหมือนจะไม่พร้อมใช้งานสำหรับโครงการ. NET Framework เท่านั้น (ดังภาพด้านล่าง) สำหรับโครงการ. NET Core 3.0: C # 8 รองรับ. NET Framework หรือไม่

17
สามเหลี่ยมคำเตือนสีเหลืองหมายถึงอะไรเมื่อพึ่งพาใน Visual Studio 2017
ฉันเพิ่งแปลงไลบรารี PCL ของฉันเป็นไลบรารี. Net Standard ใหม่และฉันมีสามเหลี่ยมคำเตือนสีเหลืองเกี่ยวกับการพึ่งพาของฉันที่แสดงด้านล่าง: ในระหว่างการแปลงจะนำแพ็กเกจ nuget ทั้งหมดมารวมถึงการอ้างอิงดังนั้นจึงอาจเป็น dulicates ฉันจะทราบได้อย่างไรว่าสามเหลี่ยมคำเตือนสีเหลืองแสดงถึงอะไร แก้ไข สร้างบันทึก: เพื่อป้องกันไม่ให้ NuGet กู้คืนแพ็คเกจระหว่างการสร้างให้เปิดกล่องโต้ตอบตัวเลือก Visual Studio คลิกที่โหนด Package Manager และยกเลิกการเลือก 'อนุญาตให้ NuGet ดาวน์โหลดแพ็คเกจที่ขาดหายไปในระหว่างการสร้าง' NU1605: ตรวจพบการดาวน์เกรดแพ็คเกจ: NUnit จาก 3.8.1 เป็น 2.6.4 อ้างอิงแพ็กเกจโดยตรงจากโปรเจ็กต์เพื่อเลือกเวอร์ชันอื่น MyProj.UI.Tests -> MyProj.Core.Tests -> NUnit (> = 3.8.1) MyProj.UI.Tests -> NUnit (> = 2.6.4) NU1605: ตรวจพบการดาวน์เกรดแพ็คเกจ: NUnit …

6
ฉันควรใช้ ILogger, ILogger <T>, ILoggerFactory หรือ ILoggerProvider สำหรับห้องสมุดหรือไม่
สิ่งนี้อาจเกี่ยวข้องกับPass ILogger หรือ ILoggerFactory ไปยังตัวสร้างใน AspNet Core หรือไม่ อย่างไรก็ตามนี่เป็นเรื่องเกี่ยวกับการออกแบบไลบรารีโดยเฉพาะไม่เกี่ยวกับวิธีที่แอปพลิเคชันจริงที่ใช้ไลบรารีเหล่านั้นใช้การบันทึก ฉันกำลังเขียนไลบรารี. net Standard 2.0 ที่จะติดตั้งผ่าน Nuget และเพื่อให้ผู้ที่ใช้ไลบรารีนั้นได้รับข้อมูลการดีบักฉันขึ้นอยู่กับMicrosoft.Extensions.Logging.Abstractionsเพื่อให้สามารถฉีด Logger ที่เป็นมาตรฐานได้ อย่างไรก็ตามฉันเห็นหลายอินเทอร์เฟซและโค้ดตัวอย่างบนเว็บบางครั้งใช้ILoggerFactoryและสร้างตัวบันทึกใน ctor ของคลาส นอกจากนี้ยังILoggerProviderมีลักษณะที่ดูเหมือน Factory เวอร์ชันอ่านอย่างเดียว แต่การใช้งานอาจใช้หรือไม่ใช้ทั้งสองอินเทอร์เฟซดังนั้นฉันจึงต้องเลือก (โรงงานดูเหมือนธรรมดากว่าผู้ให้บริการ) รหัสบางตัวที่ฉันเคยเห็นใช้ILoggerอินเทอร์เฟซที่ไม่ใช่แบบทั่วไปและอาจแชร์อินสแตนซ์ของคนตัดไม้เดียวกันด้วยซ้ำและบางโค้ดก็ใช้ILogger&lt;T&gt;ctor และคาดว่าคอนเทนเนอร์ DI จะรองรับประเภททั่วไปแบบเปิดหรือการลงทะเบียนอย่างชัดเจนของแต่ละILogger&lt;T&gt;รูปแบบไลบรารีของฉัน ใช้ ตอนนี้ฉันคิดว่านั่นILogger&lt;T&gt;เป็นแนวทางที่ถูกต้องและอาจเป็น ctor ที่ไม่ได้ใช้อาร์กิวเมนต์นั้นและส่ง Null Logger แทน ด้วยวิธีนี้หากไม่จำเป็นต้องมีการบันทึกก็จะไม่มีการใช้ อย่างไรก็ตามตู้คอนเทนเนอร์ DI บางตัวเลือก ctor ที่ใหญ่ที่สุดจึงจะล้มเหลวอยู่ดี ฉันอยากรู้ว่าฉันควรจะทำอะไรที่นี่เพื่อสร้างความปวดหัวให้กับผู้ใช้น้อยที่สุดในขณะที่ยังให้การสนับสนุนการบันทึกที่เหมาะสมหากต้องการ

16
การกำหนดเวอร์ชันอัตโนมัติใน Visual Studio 2017 (.NET Core)
ฉันใช้เวลาสองสามชั่วโมงในการหาวิธีเพิ่มเวอร์ชันที่เพิ่มขึ้นอัตโนมัติใน. NETCoreApp 1.1 (Visual Studio 2017) ฉันรู้ว่ากำลังสร้าง AssemblyInfo.cs แบบไดนามิกในโฟลเดอร์: obj/Debug/netcoreapp1.1/ ไม่ยอมรับวิธีการเดิมของ: [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.*")] ถ้าฉันตั้งค่าโปรเจ็กต์เป็นแพ็กเกจฉันสามารถตั้งค่าเวอร์ชันได้ แต่ดูเหมือนว่าจะใช้ในการสร้างไฟล์ AssemblyInfo.cs คำถามของฉันคือมีใครคิดบ้างว่าจะควบคุมเวอร์ชันในโครงการ. NET Core (หรือ. NETStandard สำหรับเรื่องนั้น) ได้อย่างไร

3
ความหมายของแอปพลิเคชันของไลบรารีมาตรฐานขึ้นอยู่กับ metapackage คืออะไร?
สมมติว่าฉันมีไลบรารีคลาสที่ฉันต้องการกำหนดเป้าหมาย netstandard1.3 แต่ก็ใช้BigIntegerด้วย นี่คือตัวอย่างเล็กน้อย - ซอร์สไฟล์เดียวคือAdder.cs: using System; using System.Numerics; namespace Calculator { public class Adder { public static BigInteger Add(int x, int y) =&gt; new BigInteger(x) + new BigInteger(y); } } ย้อนกลับไปในโลกของproject.jsonฉันจะกำหนดเป้าหมายnetstandard1.3ในframeworksส่วนนี้และมีการพึ่งพาอย่างชัดเจนSystem.Runtime.Numericsเช่นเวอร์ชัน 4.0.1 แพ็คเกจ nuget ที่ฉันสร้างจะแสดงรายการการอ้างอิงนั้น ในโลกใหม่ที่กล้าหาญของ csproj ตาม dotnet เครื่องมือ (ฉันใช้ v1.0.1 ของเครื่องมือบรรทัดคำสั่ง) มีความนัยอ้างอิงแพคเกจ metapackageไปเมื่อกำหนดเป้าหมายNETStandard.Library 1.6.1 netstandard1.3ซึ่งหมายความว่าไฟล์โครงการของฉันมีขนาดเล็กมากเพราะไม่ต้องการการพึ่งพาอย่างชัดเจน: &lt;Project …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.