netstandard1.3をターゲットにしたいが、も使用したいクラスライブラリがあるとしますBigInteger
。ここに簡単な例があります-唯一のソースファイルは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);
}
}
戻るの世界ではproject.json
、私は、標的とするnetstandard1.3
にframeworks
セクション、そして上の明示的な依存関係持ってSystem.Runtime.Numerics
、例えばバージョン4.0.1を。私が作成するnugetパッケージには、その依存関係のみがリストされます。
csprojベースのドットネットツールの勇敢な新しい世界(コマンドラインツールのv1.0.1を使用しています)には、を対象とする場合の暗黙的なメタパッケージパッケージ参照があります。これは、明示的な依存関係を必要としないため、プロジェクトファイルが本当に小さいことを意味します。NETStandard.Library 1.6.1
netstandard1.3
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
</PropertyGroup>
</Project>
...しかし、生成されたnugetパッケージはに依存していますNETStandard.Library
。これは、私の小さなライブラリを使用するには、そこにすべてが必要であることを示唆しています。
を使用してその機能を無効にしてDisableImplicitFrameworkReferences
から、依存関係を手動で再度追加できることがわかりました。
<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>
今、私のNuGetパッケージは、依存するものを正確に述べています。直感的には、これは「リーナー」パッケージのように感じられます。
それで、私のライブラリの消費者にとって正確な違いは何ですか?誰かがUWPアプリケーションでそれを使用しようとした場合、2番目の「トリミングされた」形式の依存関係は、結果のアプリケーションが小さくなることを意味しますか?
DisableImplicitFrameworkReferences
(私が見た限りでは、問題の中でそれを読みました)明確に文書化せず、プロジェクトの作成時に暗黙的な依存関係をデフォルトにすることで、Microsoftはユーザーにメタパッケージだけに依存するように勧めています-しかし、どのようにしてクラスライブラリパッケージを作成するときに、デメリットはありませんか?
Hello World!
自己完結型アプリケーションのサイズは10MB未満に縮小されています。