2017-07-19 3 views
0

.NET 4.0からアプリケーションを移植して、クロスプラットフォームのMSBuildタスクとして.NET 4.6と.NET Standard 1.6の両方をサポートします。netstandard1.6; net46プロジェクトのレジストリクラス

このアプリケーションは、私たちがWindows開発者として当然受けたあらゆる種類のものを利用しています。そのうちの1つはRegistryRegistryKeyのクラスです。これは.NET Standard 1.6では使用できなくなりました。

Windowsプラットフォーム(.NET Frameworkおよび.NET Core)でこの機能を使用し、他のプラットフォーム(.NET Coreのみ)で無視するにはどうすればよいですか?私は各ターゲットフレームワークのために定義されたコンパイラシンボルを持っているので、私は特定のコードを#ifすることができます。しかし、現在、2つのクラスは、赤色の下線付きの.NET Standardターゲットでは不明です。

+0

「net46」と「netstandard1.6」の両方をターゲットにしていますか?もしそうなら、 '#if NET46'を使うだけです。 –

+0

私はそれをすることができますが、Windows上で動作する' dotnet msbuild'はレジストリの参照が必要です。それはビルドターゲットの選択ではなく、CLRまたはOSの選択です。 – ygoe

+0

もしあなたがコンパイル時にそれを望むなら、それは*ビルド対象の選択事項です。 netstandardをターゲットにしているときに.NETコアで利用できないクラスを使用することは期待できません。実行時に、Windows上でフルフレームワークで実行されていることを検出すると、リフレクションによって関連アセンブリを読み込むことができます。 –

答えて

0

.NET標準1.6(および明らかに2.0も)は、Windowsレジストリへのアクセスをサポートしていません。したがって、2つのオプションしかありません:

  1. 適切な引数を指定してreg queryと呼び出し、出力を解析します。これは複雑な作業のように思えるので、私はそれを調べなかった。

  2. P/Windows API関数RegOpenKeyEx,RegCloseKeyおよびRegQueryValueExを呼び出します。 https://gist.github.com/ygoe/bb776fac530176b08519a5314d53fcb6

関連する問題