2016-12-14 18 views
1

.NET CoreライブラリとUWPライブラリをビルドするコードベースがあります。最初は、両方のために役立つ単一のlibをビルドしたかったのですが、このための方法が見つかりませんでした(UWPの場合、libはStreamSocketのようなUWP固有のクラスを参照する必要があります)。2つのproject.jsonファイルが同じコードベースを共有できますか?

私はUWP用に別のプロジェクトファイルを作成しました。しかし、別のproject.jsonを作成することはできないようです(project.jsonの名前は定数なのでcore.jsonとuwp.jsonを使用できません)。そして私は自分のコードベースの複数のコピー(それぞれ独自のproject.jsonを持つ)を別のフォルダに作成したくないので、私はむしろ1つのコピーを保持したいと思います。

どういうわけか実現可能ですか? 2プラットフォーム固有のプロジェクトからというの共有、プラットフォームに依存しMyLib.Commonのコード、およびリファレンスのすべてを保管してください

MyLib.Common 
MyLib.Core 
MyLib.Uwp 

:これを達成するために

答えて

1

クリーンな方法は、3つのライブラリを持っていることであろう。この方法では、コードの複製がほとんどまたはまったくなく、問題なくUWPプロジェクトからUWP固有のライブラリを参照することもできます。

同じ.csファイルを参照する2つのプロジェクトを取得することもできます(また、共有プロジェクトを取り除くこともできます)。

+0

私は、実際には古いVisual Studioや.NET Framework(たとえば.NET Framework 2.0)のターゲットが他にもたくさんあり、共有ライブラリの概念を使用できないとは言いませんでした。だから私は実際にこのようにプロジェクトを再構築することはできません。 – Alex

0

UWPと.NET Coreプロジェクトは同じproject.jsonを使用できるようです。 UWPプロジェクトが、これは3つのDLLを構築することにつながり、独自のcsprojファイルを持っているので

"frameworks": { 
    "netstandard1.3": {}, 
    "uap10.0": { 
    "dependencies": { 
     "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2" 
    } 
    } 
}, 

:その「枠組み」のセクションは次のようになりますproject.jsonはnetstandard1.3を引き起こし、uap10.0フォルダは(ビン/デバッグに表示され、 UWPプロジェクト自体がbin/Debugにもう1つのDLLを構築している間に、.NETコアプロジェクトをビルドするときにDLLを生成します)。

bin/Debug/uap10.0/My.dllはガベージであり、UWP固有のコードを含むことはできません(.NETコアプロジェクトではUniversal Windowsリファレンスが使用できないため)。したがって、プロジェクトでWINDOWS_UWPを定義しません。 .jsonの「uap10.0」部分。

ただし、UWP csprojファイルではWINDOWS_UWPが定義されており、ユニバーサルWindowsはそのプロジェクトで使用できます。 UWPプロジェクトが構築されますときに、それは実際にはこれだけを使用しています。

"uap10.0": { 
    "dependencies": { 
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2" 
    }, 

(このコードはproject.jsonに欠落している場合、UWPプロジェクトがビルドされません)。残りのproject.json(主に "netstandard1.3"ターゲットに特有)は、ビルドプロセスに害を及ぼしません。

私は、project.jsonだけでなくcsprojファイルでも条件付きディレクティブ(この場合はWINDOWS_UWP)を定義できるので、同じプロジェクトを使用するUWPプロジェクトを処理するときに余分な結果を得ることができます.NETコアプロジェクトとして.jsonファイルを作成します。ある程度、UWP csprojはビルドプロセス中に実際のものとマージされる別のproject.jsonとして機能します。

はい、私は余分なDLLのbin/Debug/uap10.0/My.dllは使用していない(ちょうどコンパイル時間の無駄です)が得られますが、私の場合は問題ではありません。

関連する問題