トレーニング
ラーニング パス
C# を使用して .NET アプリケーションをビルドする - Training
.NET は、さまざまな種類のアプリケーションをビルドするための、無料のクロス プラットフォームかつオープン ソースの開発者向けプラットフォームです。 .NET では、複数の言語、エディター、およびライブラリを使用して、Web、モバイル、デスクトップ、ゲーム、および IoT 用のビルドを行うことができます。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
Visual Studio 2019 以降では、C++/CLI プロジェクトで .NET をターゲットにすることができます。 このサポートにより、C++/CLI 相互運用層を使用して、Windows デスクトップ アプリケーションを .NET Framework から .NET に移植できるようになります。 この記事では、C++/CLI プロジェクトを .NET Framework から .NET に移植する方法について説明します。
C++/CLI プロジェクトと .NET には、.NET Framework と比べて、いくつかの重要な制限事項があります。
-clr:pure
または -clr:safe
のコンパイルはサポートされておらず、新しい -clr:netcore
オプション (.NET Framework の -clr
に相当) のみがサポートされています。C++/CLI プロジェクトを .NET に移植するには、次のように .vcxproj ファイルに変更を加えます。 C++/CLI プロジェクトでは SDK スタイルのプロジェクト ファイルが使用されていないため、これらの移行手順は、他のプロジェクト タイプに必要な手順とは異なります。
<CLRSupport>true</CLRSupport>
プロパティを <CLRSupport>NetCore</CLRSupport>
に置き換えます。 このプロパティは、多くの場合、構成固有のプロパティ グループに含まれているため、場合によっては、複数の場所でこれを置き換える必要があります。<TargetFrameworkVersion>
プロパティを <TargetFramework>net8.0</TargetFramework>
に置き換えます。 必ずタグと値を変更してください。<Reference Include="System" />
など、System
、System.Data
、System.Windows.Forms
、System.Xml
への .NET Framework 参照をすべて削除します。 <CLRSupport>NetCore</CLRSupport>
を使用すると、.NET SDK アセンブリが自動的に参照されます。.NET C++/CLI プロジェクトでは、Windows フォームおよび WPF の API を使用できます。 これらの Windows デスクトップ API を使用するには、明示的なフレームワーク参照を UI ライブラリに追加する必要があります。 Windows デスクトップ API を使用する SDK スタイルのプロジェクトは、Microsoft.NET.Sdk.WindowsDesktop
SDK を使用して、必要なフレームワーク ライブラリを自動的に参照します。 C++/CLI プロジェクトでは SDK スタイルのプロジェクト形式を使用していないため、.NET Core をターゲットにするときに、明示的なフレームワーク参照を追加する必要があります。
Windows フォーム API を使用するには、次の参照を .vcxproj ファイルに追加します。
<!-- Reference all of Windows Forms -->
<FrameworkReference Include="Microsoft.WindowsDesktop.App.WindowsForms" />
WPF API を使用するには、次の参照を .vcxproj ファイルに追加します。
<!-- Reference all of WPF -->
<FrameworkReference Include="Microsoft.WindowsDesktop.App.WPF" />
Windows フォーム API と WPF API の両方を使用するには、次の参照を .vcxproj ファイルに追加します。
<!-- Reference the entirety of the Windows desktop framework:
Windows Forms, WPF, and the types that provide integration between them -->
<FrameworkReference Include="Microsoft.WindowsDesktop.App" />
現時点では、Visual Studio の参照マネージャーを使用してこれらの参照を追加することはできません。 代わりに、プロジェクト ファイルを手動で編集して更新します。 Visual Studio で、まずプロジェクトをアンロードする必要があります。 Visual Studio Code などの別のエディターを使用することもできます。
MSBuild を使用せずに C++/CLI プロジェクトをビルドすることもできます。 次の手順に従って、cl.exe と link.exe を使用して、.NET Core 向けの C++/CLI プロジェクトを直接ビルドします。
コンパイル時に、cl.exeに -clr:netcore
を渡します。
必要な .NET 参照アセンブリを参照してください。
リンクするときに、.NET アプリのホスト ディレクトリを LibPath
として指定して、ijwhost.lib が検出されるようにしてください。
ijwhost.dll を .NET アプリのホスト ディレクトリからプロジェクトの出力ディレクトリにコピーしてください。
マネージド コードを実行するアプリケーションの最初のコンポーネント用に runtimeconfig. json ファイルが存在することを確認してください。 最新バージョンの Visual Studio では、runtime.config ファイルが自動的に作成され、コピーされます。
以前のバージョンの Visual Studio の場合、アプリケーションにネイティブ エントリ ポイントがあるときは、.NET ランタイムを使用する最初の C++/CLI ライブラリに対して、次の runtimeconfig.json ファイルを手動で作成する必要があります。 C++/CLI ライブラリがマネージド エントリ ポイントから呼び出された場合、エントリ ポイント アセンブリにはランタイムの起動時に使用される runtimeconfig.json ファイルがあるため、ライブラリには必要ありません。
{
"runtimeOptions": {
"tfm": "net8.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
}
}
}
注意
.NET 7 以降のバージョンをターゲットとする C++/CLI アセンブリは、常に既定の AssemblyLoadContext に読み込まれます。 ただし、.NET 6 以前のバージョンでは、C++/CLI アセンブリが複数回読み込まれる可能性があり、そのたびに新しい AssemblyLoadContext
に読み込まれます。 C++/CLI アセンブリのマネージド コードが最初にどこから実行されるかによって、読み込み先が異なります。
AssemblyLoadContext
に読み込まれます。AssemblyLoadContext
(通常は既定) に読み込まれます。C++/CLI アセンブリが常に既定の AssemblyLoadContext
に読み込まれるようにするには、エントリ ポイント アセンブリから C++/CLI アセンブリを呼び出す "初期化" スタイルの呼び出しを追加できます。 詳細については、こちらの dotnet、ランタイムに関する問題を参照してください。
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。
トレーニング
ラーニング パス
C# を使用して .NET アプリケーションをビルドする - Training
.NET は、さまざまな種類のアプリケーションをビルドするための、無料のクロス プラットフォームかつオープン ソースの開発者向けプラットフォームです。 .NET では、複数の言語、エディター、およびライブラリを使用して、Web、モバイル、デスクトップ、ゲーム、および IoT 用のビルドを行うことができます。