設定 - ターゲットプラットフォーム
概要
Visual Studioでは、64ビットプラットフォームを含む様々なプラットフォーム向けにアプリケーションを設定できる。
64ビットプラットフォームの詳細については、以下のWebサイトを参照すること。
https://docs.microsoft.com/ja-jp/dotnet/framework/64-bit-apps
対象プラットフォームの指定
構成マネージャの使用
構成マネージャを使用する場合、プロジェクトの対象となる新しいプラットフォームを簡単に追加できる。
C#またはVBに用意されているプラットフォームのいずれかを選択すると、
プロジェクトのプロパティは、選択したプラットフォーム向けにプロジェクトをビルドするように自動的に変更される。
プロジェクトデザイナの使用
プロジェクトデザイナにも、様々なプラットフォームをプロジェクトの対象にする方法が用意されている。
[新しいソリューション プラットフォーム]画面にあるプラットフォームのいずれかを選択しても動作しない場合、
カスタム構成名を作成して、プロジェクトデザイナで設定を変更して、適切なプラットフォームを対象にすることができる。
この方法は、使用するプログラミング言語によって異なる。
詳細については、以下のWebサイトを参照すること。
- Visual Basicプロジェクト
- Visual C#プロジェクト
- Visual C++プロジェクト
例 : x64プラットフォーム向けのプロジェクトの構成
- [ビルド]メニューバー - [構成マネージャー]を選択する。
- [アクティブ ソリューション プラットフォーム]ボックスの一覧で、ソリューションの対象となる64ビットプラットフォームを選択する。
必要なプラットフォームが表示されない場合は、[アクティブ ソリューション プラットフォーム]ボックスの一覧の[新規作成]を選択する。 - [新しいソリューション プラットフォーム]画面が表示されるので、[新しいプラットフォームを入力または選択してください]プルダウンから[x64]を選択する。
- ※注意
- 構成に新しい名前を指定する場合は、[プロジェクト デザイナー]で適切なプラットフォームを対象にするよう設定の変更が必要になることがある。
- 現在のプラットフォーム構成から設定をコピーする場合は、構成を選択して[OK]ボタンを押下する。
- 64ビットプラットフォームを対象とする全てのプロジェクトのプロパティが更新される。
次回のビルドから、64ビットプラットフォーム用に最適化される。
※注意
プラットフォーム名であるWin32は、C++プロジェクトに使用され、x86を意味する。
Visual Studioでは、プロジェクトレベルのプラットフォームとソリューションレベルのプラットフォームの両方が考慮され、
プロジェクトプラットフォームは、言語固有のプロジェクトシステムから取得される。
C++プロジェクトでは、Win32とx64が使用されるが、ソリューションプラットフォームではx86とx64が使用される。
ソリューション構成としてx86を選択すると、Visual StudioによってC++プロジェクトにWin32プラットフォームが選択される。
プロジェクトレベルのプラットフォームとソリューションレベルのプラットフォームの両方の設定を表示するには、
[構成マネージャー]を開いて、2つのプラットフォームの設定を確認する。
ソリューションレベルのプラットフォームは[アクティブ ソリューション プラットフォーム]プルダウンに表示され、
テーブルには各プロジェクトのプロジェクトレベルのプラットフォームが表示される。
プロジェクトファイルの特殊な編集
カスタムの構成によっては、プロジェクトファイルを手動で編集しなければならないことがある。
例えば、以下の例のように、2つの異なるプラットフォームでの参照等、Visual Studioで指定できない場合がある。
x86とx64のDLLを参照する
x86とx64の両方のバージョンを持つ.NETアセンブリまたはDLLが存在する場合、これらの参照を使用するには、
参照を追加した後、プロジェクトファイルを編集して構成とターゲットプラットフォームの両方を参照する条件を含むItemGroup要素を追記する。
例えば、参照しているDLLがClassLibrary1.dllの時、デバッグ構成とリリース構成に異なるパスがあり、x86とx64の両方のバージョンがあるとする。
この時、以下のように、全ての設定の組み合わせより4つのItemGroup要素を追記する。
プロジェクトファイルの詳細は、MSBuild プロジェクトファイルスキーマリファレンスを参照すること。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
<Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64'">
<Reference Include="ClassLibrary1">
<HintPath>..\..\ClassLibrary1\ClassLibrary1\bin\x64\Debug\netstandard2.0\ClassLibrary1.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64'">
<Reference Include="ClassLibrary1">
<HintPath>..\..\ClassLibrary1\ClassLibrary1\bin\x64\Release\netstandard2.0\ClassLibrary1.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86'">
<Reference Include="ClassLibrary1">
<HintPath>..\..\ClassLibrary1\ClassLibrary1\bin\x86\Debug\netstandard2.0\ClassLibrary1.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86'">
<Reference Include="ClassLibrary1">
<HintPath>..\..\ClassLibrary1\ClassLibrary1\bin\x86\Release\netstandard2.0\ClassLibrary1.dll</HintPath>
</Reference>
</ItemGroup>
</Project>