[解決済み] メタパッケージに依存するネットスタンダードライブラリのアプリケーションへの影響とは?
質問
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 ベースの dotnet ツール (私はコマンドライン ツールの 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 番目の、"trimed" 形式は、結果として生じるアプリケーションがより小さくなることを意味しますか?
ドキュメント化しないことで
DisableImplicitFrameworkReferences
を明確にしないことで、(私が見た限りでは。
を発行しています。
で読みました)、プロジェクトを作成するときに暗黙の依存関係をデフォルトにすることで、Microsoft は
を奨励しています。
しかし、クラス ライブラリ パッケージを作成しているときに、それが不利にならないことをどのようにして確認できますか?
どのように解決するのですか?
過去に、私たちは開発者にメタ
パッケージ (
NETStandard.Library
) を参照するのではなく、NuGet パッケージから
のような個々のパッケージを参照することを推奨してきました。
System.Runtime
と
System.Collections
. その理由は
その根拠は、メタ パッケージを、.NET プラットフォームの実際の原子構成要素であるパッケージの束の略記法と考えていたためです。
パッケージの略語と考えたからです。その理由は
前提は、これらの原子ブロックの一部だけをサポートし、すべてをサポートしない別の.NETプラットフォームを作成することになるかもしれないということです。
これらの原子ブロックの一部だけをサポートし、すべてをサポートしない別の.NETプラットフォームを作成することになるかもしれない、ということです。ですから、参照するパッケージの数が少なければ少ないほど、移植性は高くなります。また、私たちのツールが大規模なパッケージ グラフをどのように扱うかに関する懸念もありました。
今後、私たちはこれを簡略化します。
-
.NET Standardは原子的なビルディングブロックである . 言い換えれば、新しいプラットフォームは は .NET 標準をサブセットすることは許されず、そのすべてを実装しなければなりません。
-
私たちは、プラットフォームを記述するためにパッケージを使用することから脱却しつつあります。 , .NET Standard も含めてです。
これは、.NET Standard 用の NuGet パッケージを参照する必要がないことを意味します。 を参照する必要がないことを意味します。lib フォルダーで依存関係を表現します。 これは、他のすべての .NET プラットフォーム、特に .NET Framework で機能してきた方法とまったく同じです。
しかし、今現在、私たちのツールはまだ
NETStandard.Library
. そのことに害はありません。
冗長になるだけです。
を更新して FAQ を更新して、この質問を含めるようにします。
更新 : この質問は現在 FAQの一部です。 .
関連
-
[解決済み] ソリューションにNuGetでサポートされているプロジェクトがない
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] NuGetで旧バージョンのパッケージをダウンロードする
-
[解決済み] packages.config にあるすべてのパッケージを NuGet にインストール/更新させるにはどうすればよいですか?
-
[解決済み] アセットファイルproject.assets.jsonが見つかりません。NuGetパッケージの復元を実行する
-
[解決済み] NuGet経由で古いバージョンのパッケージをインストールするにはどうすればよいですか?
-
[解決済み] NuGetパッケージのリストアが機能しない
-
[解決済み] ソリューション内のどのプロジェクトからも参照されていない NuGet パッケージを削除するにはどうすればよいですか?
-
[解決済み] いくつかのプロジェクトが複数のソリューションに含まれている場合、すべてのソリューションに共通のnugetパッケージフォルダを設定する
-
[解決済み] リリースモードでコンパイルされたNuGetプロジェクトのパッケージング?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ソリューションにNuGetでサポートされているプロジェクトがない
-
[解決済み] ChocolateyとNuGetの違い
-
[解決済み] コマンドラインを使用してNuGetパッケージのキャッシュをクリアするにはどうすればよいですか?
-
[解決済み] アセットファイルproject.assets.jsonが見つかりません。NuGetパッケージの復元を実行する
-
[解決済み] NuGet経由で古いバージョンのパッケージをインストールするにはどうすればよいですか?
-
[解決済み] NuGetパッケージのリストアが機能しない
-
[解決済み] ソリューション内のどのプロジェクトからも参照されていない NuGet パッケージを削除するにはどうすればよいですか?
-
[解決済み] いくつかのプロジェクトが複数のソリューションに含まれている場合、すべてのソリューションに共通のnugetパッケージフォルダを設定する
-
[解決済み] リリースモードでコンパイルされたNuGetプロジェクトのパッケージング?
-
[解決済み] コマンドラインを使用したNupkgファイルの抽出