次の方法で共有


Windows 互換機能パックを使用してコードを .NET に移植する

.NET Framework から .NET に既存のコードを移植するときに見られる最も一般的な問題の一部は、.NET Framework でのみ見られる API とテクノロジへの依存関係です。 Windows 互換機能パックには、これらのテクノロジの多くが用意されているため、.NET アプリケーションと .NET Standard ライブラリを構築する方がはるかに簡単です。

互換性パックは、API セットを大幅に増加させる .NET Standard 2.0 の論理拡張機能です。 既存のコードは、ほとんど変更なしでコンパイルされます。 "すべての .NET 実装で提供される API のセット" という約束を守るために、.NET Standard には、レジストリ、Windows Management Instrumentation (WMI)、リフレクション出力 API など、すべてのプラットフォームで機能しないテクノロジは含まれていません。 Windows 互換機能パックは .NET Standard の上にあり、これらの Windows 専用テクノロジへのアクセスを提供します。 これは、.NET に移行したいが、少なくとも最初の手順として Windows を使用する予定のお客様に特に便利です。 そのシナリオでは、Windows 専用テクノロジを使用すると、移行のハードルを取り除くことができます。

パッケージの内容

Windows 互換機能パックは 、Microsoft.Windows.Compatibility NuGet パッケージ を介して提供され、.NET または .NET Standard を対象とするプロジェクトから参照できます。

Windows 専用 API やクロスプラットフォーム API など、次のテクノロジ領域から約 20,000 個の API が提供されます。

  • コードページ
  • CodeDom
  • コンフィギュレーション
  • ディレクトリ サービス
  • ODBC(オープンデータベースコネクティビティ)
  • 権限
  • ポート
  • Windows アクセス制御リスト (ACL)
  • Windows Communication Foundation (WCF)
  • Windows 暗号化
  • Windows イベントログ
  • Windows Management Instrumentation (WMI)
  • Windows パフォーマンス カウンター
  • Windows レジストリ
  • Windows ランタイム キャッシュ
  • Windows サービス

詳細については、 互換性パックの仕様を参照してください。

始めましょう

  1. 移植する前に、必ず 移植プロセスを確認してください。

  2. 既存のコードを .NET または .NET Standard に移植する場合は、 Microsoft.Windows.Compatibility NuGet パッケージをインストールします。

    Windows を使い続ける場合は、準備万端です。

  3. Linux または macOS で .NET アプリケーションまたは .NET Standard ライブラリを実行する場合は、 プラットフォーム互換性アナライザー を使用して、クロスプラットフォームで動作しない API の使用状況を見つけます。

  4. これらの API の使用を削除するか、クロスプラットフォームの代替手段に置き換えるか、次のようなプラットフォーム チェックを使用して保護します。

    private static string GetLoggingPath()
    {
        // Verify the code is running on Windows.
        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
        {
            using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Fabrikam\AssetManagement"))
            {
                if (key?.GetValue("LoggingDirectoryPath") is string configuredPath)
                    return configuredPath;
            }
        }
    
        // This is either not running on Windows or no logging path was configured,
        // so just use the path for non-roaming user-specific data files.
        var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        return Path.Combine(appDataPath, "Fabrikam", "AssetManagement", "Logging");
    }
    

デモについては、 Windows 互換機能パックの Channel 9 ビデオをご覧ください