Giả sử tôi có một thư viện lớp mà tôi muốn nhắm mục tiêu netstandard1.3, nhưng cũng sử dụng BigInteger
. Đây là một ví dụ nhỏ - tệp nguồn duy nhất là Adder.cs
:
using System;
using System.Numerics;
namespace Calculator
{
public class Adder
{
public static BigInteger Add(int x, int y)
=> new BigInteger(x) + new BigInteger(y);
}
}
Quay trở lại thế giới của project.json
, tôi sẽ nhắm mục tiêu netstandard1.3
trong frameworks
phần và có phụ thuộc rõ ràng vào System.Runtime.Numerics
, ví dụ: phiên bản 4.0.1. Gói nuget mà tôi tạo sẽ chỉ liệt kê sự phụ thuộc đó.
Trong thế giới mới dũng cảm của csproj dựa trên DotNet dụng cụ (Tôi đang sử dụng v1.0.1 trong những công cụ dòng lệnh) có một gói siêu gói tài liệu tham khảo ngầm để NETStandard.Library 1.6.1
khi nhắm mục tiêu netstandard1.3
. Điều này có nghĩa là tệp dự án của tôi thực sự nhỏ, vì nó không cần phụ thuộc rõ ràng:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
</PropertyGroup>
</Project>
... nhưng gói nuget được tạo ra có phụ thuộc vào NETStandard.Library
, điều này gợi ý rằng để sử dụng thư viện nhỏ của tôi, bạn cần mọi thứ ở đó.
Hóa ra tôi có thể tắt chức năng đó bằng cách sử dụng DisableImplicitFrameworkReferences
, sau đó thêm lại phần phụ thuộc theo cách thủ công:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Runtime.Numerics" Version="4.0.1" />
</ItemGroup>
</Project>
Bây giờ gói NuGet của tôi nói chính xác những gì nó phụ thuộc vào. Trực quan, điều này có cảm giác như một gói "gọn gàng hơn".
Vậy sự khác biệt chính xác đối với người tiêu dùng thư viện của tôi là gì? Nếu ai đó cố gắng sử dụng nó trong một ứng dụng UWP, thì hình thức phụ thuộc thứ hai, được "cắt bớt" có nghĩa là ứng dụng kết quả sẽ nhỏ hơn không?
Bằng cách không ghi lại tài liệu DisableImplicitFrameworkReferences
rõ ràng (theo như tôi đã thấy; tôi đã đọc về nó trong một số báo ) và bằng cách đặt sự phụ thuộc ngầm định làm mặc định khi tạo một dự án, Microsoft đang khuyến khích người dùng chỉ phụ thuộc vào gói siêu nhỏ - nhưng làm sao tôi có thể chắc chắn rằng điều đó không có nhược điểm khi tôi tạo một gói thư viện lớp?
Hello World!
ứng dụng độc lập giảm xuống còn <10MB.