CMakeで.NETプロジェクトをビルドする際のVS_DOTNET_REFERENCES_COPY_LOCALプロパティの役割

2024-04-09

CMake の VS_DOTNET_REFERENCES_COPY_LOCAL プロパティ

VS_DOTNET_REFERENCES_COPY_LOCAL は、CMake で .NET プロジェクトをビルドする際に、参照されているアセンブリを出力ディレクトリにコピーするかどうかを制御するプロパティです。

デフォルトでは ON に設定されており、参照されているアセンブリは出力ディレクトリにコピーされます。

設定方法

set_target_properties() コマンドを使用して、このプロパティを設定できます。

set_target_properties(my_target PROPERTIES VS_DOTNET_REFERENCES_COPY_LOCAL OFF)

この例では、my_target ターゲットの VS_DOTNET_REFERENCES_COPY_LOCAL プロパティを OFF に設定しています。

使用例

  • アプリケーションが .NET Framework に含まれているアセンブリのみを参照する場合、このプロパティを OFF に設定して、ビルド時間を短縮できます。
  • アプリケーションが .NET Framework に含まれていないアセンブリを参照する場合、このプロパティを ON に設定する必要があります。

注意事項

  • このプロパティは、Visual Studio ソリューションファイル (.sln) を生成する場合にのみ使用されます。
  • .NET プロジェクトをビルドする際は、常に target_link_libraries() コマンドを使用して、参照されているアセンブリを指定する必要があります。

補足

  • .NET アセンブリには、ヒントパス と呼ばれるファイルパス情報が含まれている場合があります。ヒントパスは、アセンブリの場所を指定するために使用されます。
  • VS_DOTNET_REFERENCES_COPY_LOCAL プロパティは、ヒントパスを持つアセンブリのみを対象にしています。ヒントパスを持たないアセンブリは、常にシステムパスから読み込まれます。
  • Visual Studio では、プロジェクト参照 と呼ばれる機能を使用して、別の .NET プロジェクトを参照することができます。プロジェクト参照は、target_link_libraries() コマンドを使用して設定できます。
  • VS_DOTNET_REFERENCES_COPY_LOCAL プロパティは、プロジェクト参照には適用されません。プロジェクト参照で参照されているアセンブリは、常に出力ディレクトリにコピーされます。


VS_DOTNET_REFERENCES_COPY_LOCAL プロパティのサンプルコード

すべての参照アセンブリを出力ディレクトリにコピーする

set(CMAKE_PROJECT_NAME MyProject)

add_executable(my_exe
  main.cpp)

target_link_libraries(my_exe
  System.dll)

set_target_properties(my_exe PROPERTIES VS_DOTNET_REFERENCES_COPY_LOCAL ON)

特定のアセンブリのみを出力ディレクトリにコピーする

set(CMAKE_PROJECT_NAME MyProject)

add_executable(my_exe
  main.cpp)

target_link_libraries(my_exe
  System.dll
  MyCustomAssembly.dll)

set_target_properties(my_exe PROPERTIES VS_DOTNET_REFERENCES_COPY_LOCAL ON)

# MyCustomAssembly.dll をのみ出力ディレクトリにコピーする
set_target_properties(my_exe PROPERTIES VS_DOTNET_REFERENCE_COPY_LOCAL_LIST
  MyCustomAssembly.dll)

この例では、System.dll アセンブリはコピーされませんが、MyCustomAssembly.dll アセンブリは my_exe 実行可能ファイルと同じディレクトリにコピーされます。

.NET Framework に含まれているアセンブリをコピーしない

set(CMAKE_PROJECT_NAME MyProject)

add_executable(my_exe
  main.cpp)

target_link_libraries(my_exe
  System.dll)

set_target_properties(my_exe PROPERTIES VS_DOTNET_REFERENCES_COPY_LOCAL OFF)

この例では、System.dll アセンブリは .NET Framework に含まれているため、コピーされません。

プロジェクト参照を使用する

set(CMAKE_PROJECT_NAME MyProject)

add_subdirectory(MyCustomProject)

add_executable(my_exe
  main.cpp)

target_link_libraries(my_exe
  MyCustomProject)

set_target_properties(my_exe PROPERTIES VS_DOTNET_REFERENCES_COPY_LOCAL ON)

この例では、MyCustomProject プロジェクトは my_exe プロジェクトによって参照されます。MyCustomProject プロジェクトによって出力されたすべてのアセンブリは、my_exe 実行可能ファイルと同じディレクトリにコピーされます。



VS_DOTNET_REFERENCES_COPY_LOCAL プロパティの代替方法

アセンブリを GAC にインストールする

概要

GAC (Global Assembly Cache) は、.NET アセンブリを共有するために使用できるシステムレベルのキャッシュです。GAC にインストールされたアセンブリは、すべての .NET アプリケーションから参照できます。

方法

  • gacutil コマンドを使用して、アセンブリを GAC にインストールできます。
gacutil /i MyCustomAssembly.dll
  • Visual Studio では、プロジェクトのプロパティを使用して、アセンブリを GAC にインストールすることができます。

注意事項

  • GAC にインストールされたアセンブリは、すべての .NET アプリケーションで使用できるため、注意が必要です。
  • GAC にインストールされたアセンブリをアンインストールするには、gacutil コマンドを使用する必要があります。

アセンブリをアプリケーションの出力ディレクトリに配置する

概要

VS_DOTNET_REFERENCES_COPY_LOCAL プロパティを OFF に設定し、target_link_libraries() コマンドを使用して、アセンブリの場所を指定することができます。

方法

  • target_link_libraries() コマンドの PRIVATE オプションを使用して、アセンブリの場所を指定できます。
set(CMAKE_PROJECT_NAME MyProject)

add_executable(my_exe
  main.cpp)

target_link_libraries(my_exe
  PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/MyCustomAssembly.dll)

この例では、MyCustomAssembly.dll アセンブリは my_exe 実行可能ファイルと同じディレクトリに配置されます。

注意事項

  • この方法を使用する場合は、アセンブリの場所をアプリケーションのコードにハードコーディングする必要があります。
  • アセンブリの場所を変更する場合は、アプリケーションのコードも変更する必要があります。

NuGet を使用する

概要

NuGet は、.NET アセンブリを管理するために使用できるオープンソースのパッケージマネージャーです。NuGet を使用すると、アセンブリを簡単にダウンロード、インストール、更新することができます。

方法

  • NuGet パッケージマネージャーを使用して、プロジェクトに NuGet パッケージを追加できます。
  • NuGet パッケージには、.NET アセンブリだけでなく、その他のファイル (設定ファイル、ドキュメントなど) も含まれている場合があります。

注意事項

  • NuGet を使用するには、インターネット接続が必要です。
  • NuGet パッケージは、公式の NuGet ギャラリーからダウンロードするか、独自の NuGet ソースからダウンロードすることができます。

VS_DOTNET_REFERENCES_COPY_LOCAL プロパティは、.NET アセンブリを配置するための最も簡単な方法ですが、他の方法も存在します。どの方法を使用するかは、プロジェクトの要件によって異なります。




Visual Studioでシェーダーファイルをコンパイルする:CMakeのVS_SHADER_FLAGSオプション

CMake の "Properties: Source Files" に設定できる "VS_SHADER_FLAGS" は、Visual Studio でシェーダーファイルのコンパイル時に渡されるオプションを指定します。このオプションは、シェーダーの動作やコンパイル方法を制御するために使用されます。



CMakeでXcodeプロジェクトを極める! "Properties: Source Files"と"XCODE_LAST_KNOWN_FILE_TYPE"の達人になるためのテクニック

この情報は、Xcode がファイルを開いたり、編集したり、ビルドしたりする際にどのように扱うかを決定するために使用されます。Properties: Source Files は、CMakeLists. txt ファイルで設定できます。 以下の例は、main


CMakeでVS_IOT_EXTENSIONS_VERSIONを使用する際のトラブルシューティング

VS_IOT_EXTENSIONS_VERSION は、CMake のターゲットプロパティで、Visual Studio ソリューションに含める Windows 10 IoT 拡張のバージョンを指定します。設定方法バージョンは、4 つの数字で構成される文字列で指定します。例:


CMakeでVisual Studio ソリューションのソースコード管理を楽にする「VS_SCC_LOCALPATH」

"VS_SCC_LOCALPATH" は、CMake の "Properties: Targets" で使用されるプロパティです。Visual Studio ソリューション内でソースコード管理 (SCC) を使用する際に、ソースファイルのローカルパスを指定するために使用されます。


CMakeにおけるVS_WINRT_COMPONENTを使用したサンプルコード

"VS_WINRT_COMPONENT"は、CMakeでWindows向けRTコンポーネントをビルドする際に使用するプロパティです。このプロパティを設定することで、Visual Studioソリューションファイル (.sln) とプロジェクトファイル (.vcxproj) の生成に必要な情報を提供できます。



CUDA分離コンパイルでホストコードとデバイスコードを分離する方法

"CUDA_SEPARABLE_COMPILATION" は、CMake の "Properties: Targets" で使用できるターゲットプロパティです。これは、CUDA デバイスコードの分離コンパイルを有効にするために使用されます。


CMake ModulesでOSG Viewerを簡単に見つける: FindosgViewer徹底解説

本解説では、FindosgViewer の仕組み、使い方、設定オプション、およびその他の関連情報について詳しく説明します。FindosgViewer は以下の役割を担います。OSG Viewer ライブラリの自動検出 パス指定なしでOSG Viewer ライブラリを見つけられるようにします。 異なるOSやプラットフォームにおけるビルドを簡略化します。


CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES の詳細解説

以下の例は、CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES を使用して、コンパイル時に CMAKE_CXX_FLAGS 変数を無視する方法を示しています。この例では、CMAKE_CXX_FLAGS 変数は -Wall -Wextra に設定されていますが、CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES 変数が TRUE に設定されているため、これらのフラグはコンパイル時に無視されます。


CMakeでシェルコマンドを実行したい?add_custom_commandの使い方を分かりやすく解説

add_custom_command() は CMake における強力なツールであり、シェルコマンドをビルドプロセスにシームレスに統合できます。このガイドでは、add_custom_command() の詳細な使い方を、豊富な例と分かりやすい解説を通して説明します。


CMakeの CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 変数:Windows 10 SDKのバージョンを指定する方法

CMake 変数 CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION は、Visual Studio 2015 以降で Windows 10 以上のターゲットをビルドする場合、使用する Windows SDK のバージョンを指定するために使用されます。