[解決済み] csprojで.NET Coreクラスライブラリをマルチターゲットにする方法とは?
質問
.NET Coreがまだ
project.json
形式を使用していたころは、クラスライブラリ
複数のフレームワークをターゲットにした
(例:net451, netcoreapp1.0)をターゲットとしたクラスライブラリを構築することができます。
現在、公式のプロジェクト形式は
csproj
を使用してMSBuildを実行する場合、ターゲットとする複数のフレームワークをどのように指定するのでしょうか?VS2017 のプロジェクト設定から探そうとしているのですが、.NET Core フレームワークの中から単一のフレームワークしかターゲットにできません(他のフルバージョンの .NET Framework はリストアップされないので
を行う
はインストールされています)。
どのように解決するのですか?
プロジェクトファイルを手動で編集し、そのファイルに s をデフォルトの ターゲットフレームワーク に変更し、基本的には ターゲットフレームワーク . それから Moniker と共に ; セパレータを使用します。
また、Nuget パッケージの参照を条件付き ItemGroup に手動で、または VS Nuget パッケージマネージャを使用して置くことができます。
.csprojはこのようなものになるはずです。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard1.6;net452</TargetFrameworks>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net452'">
<PackageReference Include="Microsoft.Azure.DocumentDB">
<Version>1.12.0</Version>
</PackageReference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard1.6'">
<PackageReference Include="Microsoft.Azure.DocumentDB.Core">
<Version>1.1.0</Version>
</PackageReference>
</ItemGroup>
</Project>
ドキュメントが足りないので最近やっているもう一つの回避策は、VS2015でプロジェクトを作成し、利用可能なドキュメントとインテリセンスを使ってproject.jsonを形成し、その後VS2017でソリューションを開き、ビルトインのアップグレードを使用することです。その後、csprojファイルを見て、その構成を実現する方法を考えます。
を使用せずに、より難解なターゲットをマルチ ターゲット化する。 Moniker :
マイクロソフトです。
<ブロッククオートPCL は推奨されません+。
PCL はサポートされていますが、パッケージの作者は代わりに netstandardをサポートすべきです。.NET プラットフォーム標準は、PCL を発展させたものです。 PCL を発展させたものであり、単一の名称を使用してプラットフォーム間でのバイナリ移植性を表します。 のような静的なものに縛られることなく、プラットフォーム間でのバイナリ移植性を表します。
Portable Profile をターゲットとする場合、あらかじめ定義された
モノカー
を持たないので、ポータブルプロファイルもまた
TargetFrameworkIdentifier
,
TargetFrameworkVersion
そして
TargetFrameworkProfile
. また、コンパイラ定数も自動的に定義されません。最後に、デフォルトでは提供されていないすべてのアセンブリ参照を追加する必要があります。
以下の例は、プロジェクトで
dynamic
キーワードを使用したプロジェクトで、さらに
Microsoft.CSharp
アセンブリが必要であるため、異なるターゲットに対してどのように参照されるかがわかります。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard1.5;net40;portable40-net45+sl5+win8+wp8</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)'=='portable40-net45+sl5+win8+wp8'">
<TargetFrameworkIdentifier>.NETPortable</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Profile158</TargetFrameworkProfile>
<DefineConstants>$(DefineConstants);PORTABLE158</DefineConstants>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)'=='netstandard1.5'">
<PackageReference Include="Microsoft.CSharp" Version="4.3.0" />
<PackageReference Include="System.ComponentModel" Version="4.3.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'=='net40'">
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'=='portable40-net45+sl5+win8+wp8'">
<Reference Include="Microsoft.CSharp" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Windows" />
</ItemGroup>
</Project>
関連
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み] 2つのリストを結合する
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] EXEを出力する.NET Coreコンソールアプリケーションを構築する
-
[解決済み] .NET Core プロジェクトで NuGet 参照をビルド出力にコピーするにはどうすればよいですか?
-
[解決済み] dotnet cli と vs2017 msbuild の関係
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】C#で四捨五入する方法
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?