2016-12-31 20 views
4

現在.NET 2.0以降をサポートしているsmall libraryがあります。.NET 2.0と.NET Standardの両方をターゲットとするライブラリを作成するにはどうすればよいですか?

私は後のフレームワークのバージョンの機能を使用しないので、2.0のサポートを維持することはいいですが、.NET Core(またはより正確には.NET標準)をターゲットにしたいと考えています。

私はproject.jsonに両方のフレームワークを追加しようとしました:

"frameworks": { 
    "net20": {}, 
    "netstandard1.6": { 
    "imports": "dnxcore50" 
    } 
} 

しかし、NuGetは、私のライブラリは、.NETの標準(System.ReflectionMicrosoft.AspNetCore.WebUtilities)上で実行する必要があるパッケージ化する.NET 2.0と互換性がありません。

ほとんど同じコードの2つの完全に別々のプロジェクトを維持することなくこの問題を解決するにはどうすればよいですか?

+0

最低要件が4.5.1/netstandard 1.3(= .NET Framework 4.6)のパッケージを使用するには、.NET Framework 2.0サポートが必要ですか?レガシASP.NET 4で使用しますか?そうでない場合は、ASP.NETコアが4.5または4.5.1より低いもので実行されないため、ASP.NET Coreに依存している場合はその低を対象とする理由はありません – Tseng

答えて

4

Microsoft.AspNetCore.*パッケージに依存する場合、絶対の.NET標準をサポートするための最小値は.NET 4.5です。

.NET 4.5は、.NET CoreのベースとなるSystem.Runtimeを含む最初のバージョンです。しかし、それについてもっと近く考えると、それは意味をなさない。ライブラリ内でASP.NET Coreをサポートする必要がある場合。

ライブラリがASP.NETコアとASP.NET 4(つまりMVC 5、WebApi 2)で実行される場合は、ASP.NET依存関係を条件付きで使用し、#ifプリプロセッサディレクティブを使用する必要があります。

"frameworks": { 
    "net20": { 
    "dependencies": { 
     "NameOf.AspNetLegacyPackage": "1.2.3" 
    } 
    }, 
    "netstandard1.3": { 
    "dependencies": { 
     "Microsoft.AspNetCore.WebUtilities" : "1.1.0" 
    }, 
    "imports": "dnxcore50" 
    } 
} 

ことがMicrosoft.AspNetCore.WebUtilitiesの最小だが、あなたの他の依存関係に応じて、あなたがより高いまたは低い行く必要があるかもしれませんように私はnetstandard1.3を使用。

NameOf.AspNetLegacyPackageは、必要な場合はMicrosoft.AspNetCore.WebUtilitiesと同じ機能が含まれていますが、.NET Framework 2.0(該当する場合)に対応するパッケージの名前です。そうでない場合は、それを削除し、交換機能を自分で書き込む必要があります。

は、.NET Framework 2.0のサポートを放棄し、4.5.1のために行く予定がある場合次に、あなたのコードを使用して

#if NETSTANDARD1_3 
    // Code or APIs which is only available in netstandard1.3/net4.6 
    // this includes the Microsoft.AspNetCore.WebUtillities 
#else 
    // Use code or API which runs under .NET Framework 2.0 
#endif 

あるいは、あなたがMicrosoft.AspNetCore.WebUtillitiesを使用し続けることができますが(依存関係のためNuGet pageを参照)、それ両方

"dependencies": { 
    "Microsoft.AspNetCore.WebUtilities" : "1.1.0" 
}, 
"frameworks": { 
    "net451": { 
    }, 
    "netstandard1.3": { 
    "imports": "dnxcore50" 
    } 
} 
1

にあなたは共有プロジェクトにコードを置くことによってこれを行うことができ、その後、.NET 2.0を対象とクラスライブラリ、およびNetStandardを対象に、別のクラスライブラリプロジェクトを作成しました。 2.0またはNetstandardに他のプラットフォームで利用できないものがある場合は、コンパイラ指令を使用してそれぞれに互換性のあるコードを書くことができます。

関連する問題