何年もの間、プロジェクトのすべてのソース コードを含むディレクトリ内に各プラットフォーム用のプロジェクトを作成することにより、これらのプラットフォーム間で C# コードを共有してきました。新しいプラットフォームを追加したときに、 を含むコード ファイルが新しいプラットフォームでコンパイルされない場合は、コード ファイルのコピーを作成し、目的のプラットフォームで動作するように変更します。
プロジェクトディレクトリは次のようになります
Application.Base
Applications.Base.CF.csproj
Applications.Base.WPF.csproj
Applications.Base.Phone81.csproj
Properties
AssemblyInfo.cs
Src
WidgetWPF.cs
WidgetPhone81.cs
Widget.cs
現在、私は UWP に対して同じアプローチを取っていますが、この問題に直面しています。UWP の新しいプロジェクトを追加する場合:
Application.Base
....
Applications.Base.UWP
Properties
AssemblyInfo.cs
DSI.Applications.Base.UWP.rd.xml
...
WPF ソリューションに移動すると、Applications.Base.WPF プロジェクトのコンパイル中にエラーが発生します (WPF プロジェクトに UWP プロジェクト ファイルが含まれていないにもかかわらず、イベントが発生します)。
プロジェクトが「.NETFramework,Version=v4.6.1」フレームワークを参照していません。project.json の "frameworks" セクションに ".NETFramework,Version=v4.6.1" への参照を追加してから、NuGet 復元を再実行します。DSI.Applications.Base
いくつかの A/B テストの後、nuget を使用して UWP の Microsoft.NETCore.UniversalWindowsPlatform への参照を削除することでエラーを修正できることがわかりました。もちろん、それはUWPプロジェクトを壊します。project.json はまったく存在しません。
この方法でコード共有を継続できる回避策はありますか? すべてのプラットフォームに対応するために共有プロジェクトをリファクタリングすることは、大きな負担になります。このような共有プロジェクトは数多くあります。そのうちのいくつかは、追加のプラットフォーム (私たちの ASP.Net プロジェクト) と共有されています。