トレーニング
モジュール
新しい .NET プロジェクトを作成し、パッケージの依存関係を処理する - Training
.NET プロジェクトを作成し、パッケージを追加して、プロジェクト内のパッケージ依存関係を管理する方法を学習します。 .NET Core CLI と NuGet レジストリを使用して、Visual Studio Code でライブラリとツールを C# アプリケーションに追加します。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
C++/CLI は、.NET クラスとネイティブ C++ 型を組み合わせて、C++ コードを受け取り、.NET プログラムからアクセスできるようにするライブラリとアプリケーションを作成できるテクノロジです。
vcpkg を C++/CLI と組み合わせて使用して、 Common Language Runtime (CLR)をターゲットとするプロジェクトに C++ 依存関係をインストールして使用できます。
このチュートリアルでは、次の内容を学習します。
このチュートリアルでは、既存の C++/CLI アプリケーションから開始し、vcpkg と共にインストールされた C++ の依存関係を追加します。 このチュートリアルのコマンドは、 Developer PowerShell for Visual Studio で実行していることを前提としています。
1 - サンプル リポジトリを複製する
最初の手順は、 .NET サンプル リポジトリで C++/CLI サンプル アプリケーションのコピーを取得することです。 C++/CLI サンプル アプリケーションは、 core/interop/cpp-cli
フォルダーにあります。
git clone https://github.com/dotnet/samples
2 - サンプル アプリケーション フォルダーに移動する
cd samples/core/interpo/cpp-cli
2 - プロジェクトが正しくビルドおよび実行されていることを確認する
サンプル リポジトリには、次の 4 つのプロジェクトを含むソリューションが含まれています。
次のコマンドを実行して、ソリューションのプロジェクトをビルドします。
msbuild CPP-CLI.sln -restore
ビルドが失敗した場合は、「Prerequisites」セクションに記載されている Visual Studio に必要なコンポーネントがインストールされていること、および sample アプリケーションの .NET 5.0 SDK 以降と Visual Studio 2019 16.8 以降] の最小要件を満たしていることを確認。
ビルドが完了したら、次のコマンドを実行できます。 ManagedApp.exe
./bin/Debug/x64/ManagedApp.exe
このプログラムの出力は、次のようになります。
=== Managed class ===
Hello from ManagedClass in MixedLibrary
Hello from NativeClass in MixedLibrary
-- message: from managed app!
=== P/Invoke ===
Hello from NativeEntryPoint_CallNative in MixedLibrary
Hello from NativeClass in MixedLibrary
-- message: from managed app!
3 - Visual Studio でプロジェクトを開く
次の手順では、 fmt
を使用してコンソールにメッセージを出力するようにライブラリを変更します。 fmt
ライブラリは vcpkg 経由でインストールされ、使用しているプロジェクトにリンクされます。
ソース ファイルを編集するには、Visual Studio で CPP-CLI.sln ソリューションを開きます。
start CPP-CLI.sln
Visual Studio でソリューションを開くと、プロジェクトのターゲットを最新バージョンに変更するように求めるメッセージが表示されることがあります。 [OK] をクリックすると、Windows SDK バージョンとプラットフォーム ツールセットを最新のバージョンにアップグレードできます。
プロジェクトのターゲット Windows SDK バージョンとプラットフォーム ツールセットのバージョンを最新バージョンにします。
次に、MixedLibrary プロジェクトに次の変更を加えます。
fmt
を取得する vcpkg マニフェストを追加します。fmt
を使用してメッセージを印刷するようにNativeClass::Hello
を変更します。1 - vcpkg マニフェストを作成する
NativeLibrary プロジェクトを右クリックし、コンテキスト メニューの [新しい項目 > 追加] をクリックします。
新しい項目に vcpkg.json
名前を付けます。これは vcpkg マニフェスト ファイルです。ファイルがプロジェクトのフォルダーのルートに作成されていることを確認します。
2 - fmt
を使い捨てとして追加する
vcpkg.json
ファイルを開き、その内容を次のように編集します。
{
"dependencies": [ "fmt" ]
}
vcpkg マニフェスト ファイルが適切な場所にあり、プロジェクトをビルドしようとすると、次の警告が表示されます。
The vcpkg manifest was disabled, but we found a manifest file in samples\core\interop\cpp-cli\MixedLibrary\. You may want to enable vcpkg manifests in your properties page or pass /p:VcpkgEnableManifest=true to the msbuild invocation.
3 - MixedLibrary のプロパティで vcpkg を有効にする
プロジェクトを右クリックし、[プロパティ] オプションをクリックして、MixedLibrary のプロパティ ページを開きます。
vcpkg セクションで次のプロパティを変更します。
vcpkg を有効にするために必要
これらの変更により、Visual Studio はプロジェクトをビルドする前に、 vcpkg.json
ファイルを読み取り、マニフェストに含まれる依存関係を自動的にインストールします。
[プロパティ] ページでは、 /utf-8
フラグを有効にして、 fmt
ビルドを正しく行うこともできます。
C/C++ 設定のコマンド ライン サブセクションで、追加オプションを編集して、 /utf-8
を
最後に、[OK] をクリックして [プロパティ] ページを閉じます。
4 - vcpkg が動作していることを確認する
すべてが正しく構成されている場合、Visual Studio は、MixedLibrary プロジェクトをビルドする前に vcpkg を呼び出して依存関係をインストールします。
1>Installing vcpkg dependencies to C:\path\to\samples\core\interop\cpp-cli\MixedLibrary\vcpkg_installed\x64-windows\
1>"C:\path\to\vcpkg\vcpkg.exe" install --x-wait-for-lock --triplet "x64-windows" --vcpkg-root "C:\path\to\vcpkg\" "--x-manifest-root=C:\path\to\samples\core\interop\cpp-cli\MixedLibrary\" "--x-install-root=C:\path\to\samples\core\interop\cpp-cli\MixedLibrary\vcpkg_installed\x64-windows\"
vcpkg の出力が表示されない場合、またはfmt
ビルドに失敗した場合は、C/C++ の追加オプション>コマンド ラインに/utf-8
を追加するなど、上記の手順に正しく従っていることを確認してください。
4 - プロジェクトのソース コードを変更する
最後に、fmt
を使用してコンソールにメッセージを出力するように、MixedLibrary.cpp
ファイルを変更します。 ソース コードに次の変更を加えます。
1 - fmt/printf.h
ヘッダーを含めます (5 行目)。
#include <iostream>
#include <vcclr.h>
#include <fmt/printf.h>
2 - fmt::println
を使用するようにNativeClass::Hello
関数を変更します (44 行目)。
void MixedLibrary::NativeClass::Hello(const wchar_t *msg)
{
auto ws = std::wstring(msg);
auto str = std::string(ws.length(), 0);
std::transform(ws.begin(), ws.end(), std::back_inserter(str), [](wchar_t c) { return static_cast<char>(c); });
fmt::println("Hello from NativeClass in MixedLibrary");
fmt::println("-- message: {}", str);
fmt::println("-- printed using FMT version {}", FMT_VERSION);
}
NativeClass::Hello
関数は、ManagedApp プロジェクトで C++ コードを使用してコンソールにメッセージを出力するために使用されます。 上記の変更により、
アプリケーションのプロジェクトには必要ありません。ManagedApp プロジェクトをビルドして実行するだけです。
プログラムの出力は次のようになります。
=== Managed class ===
Hello from ManagedClass in MixedLibrary
Hello from NativeClass in MixedLibrary
-- message: from managed app!
-- printed using FMT version 110002
=== P/Invoke ===
Hello from NativeEntryPoint_CallNative in MixedLibrary
Hello from NativeClass in MixedLibrary
-- message: from managed app!
-- printed using FMT version 110002
その他の便利な機能についても説明します。
vcpkg に関するフィードバック
vcpkg はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。
トレーニング
モジュール
新しい .NET プロジェクトを作成し、パッケージの依存関係を処理する - Training
.NET プロジェクトを作成し、パッケージを追加して、プロジェクト内のパッケージ依存関係を管理する方法を学習します。 .NET Core CLI と NuGet レジストリを使用して、Visual Studio Code でライブラリとツールを C# アプリケーションに追加します。