.NET 4.0からアプリケーションを移植して、クロスプラットフォームのMSBuildタスクとして.NET 4.6と.NET Standard 1.6の両方をサポートします。netstandard1.6; net46プロジェクトのレジストリクラス
このアプリケーションは、私たちがWindows開発者として当然受けたあらゆる種類のものを利用しています。そのうちの1つはRegistry
とRegistryKey
のクラスです。これは.NET Standard 1.6では使用できなくなりました。
Windowsプラットフォーム(.NET Frameworkおよび.NET Core)でこの機能を使用し、他のプラットフォーム(.NET Coreのみ)で無視するにはどうすればよいですか?私は各ターゲットフレームワークのために定義されたコンパイラシンボルを持っているので、私は特定のコードを#if
することができます。しかし、現在、2つのクラスは、赤色の下線付きの.NET Standardターゲットでは不明です。
「net46」と「netstandard1.6」の両方をターゲットにしていますか?もしそうなら、 '#if NET46'を使うだけです。 –
私はそれをすることができますが、Windows上で動作する' dotnet msbuild'はレジストリの参照が必要です。それはビルドターゲットの選択ではなく、CLRまたはOSの選択です。 – ygoe
もしあなたがコンパイル時にそれを望むなら、それは*ビルド対象の選択事項です。 netstandardをターゲットにしているときに.NETコアで利用できないクラスを使用することは期待できません。実行時に、Windows上でフルフレームワークで実行されていることを検出すると、リフレクションによって関連アセンブリを読み込むことができます。 –