1. ホーム
  2. .net

[解決済み] vs2010でC++/CLIプロジェクトを4.0とは別のフレームワークに変更する。

2022-04-28 23:29:36

質問

Visual Studio 2010のプロジェクト形式にアップグレードしたため、私のC++/CLIプロジェクトは.net framework 4.0をターゲットにしています。

C#プロジェクトでフレームワークのバージョンを別のバージョンに切り替えるのは簡単ですが、C++/CLIプロジェクトでこれを行う方法がわかりません。プロジェクトのプロパティページにこのための設定がありません。

解決方法は?

フレームワークとリファレンス]ダイアログでF1キーを押したときに表示されます。

新しいプロジェクトのデフォルトでは、ターゲットフレームワークは.NET Framework 4に設定されています。IDE はターゲットフレームワークの変更をサポートしていませんが、手動で変更することは可能です。 プロジェクト ファイル (.vcxproj) では、デフォルトのターゲット フレームワークは v4.0 のプロパティ要素で表されます。ターゲットとなるフレームワークを変更するには、プロジェクトをアンロードし、テキストエディタでプロジェクトファイルを開き、プロパティ要素の値をv4.0からサーバーにインストールされている別のバージョンに変更します。例えば、v3.5を指定した場合、これは.NET Framework v3.5を表します。 Visual Studio 2008 SP1 がインストールされている必要があります。 . ファイルを保存して閉じ、プロジェクトを再読み込みして、対象のフレームワークがプロパティ・ページに表示されることを確認します*。

変換されたプロジェクトでは、これはあまり正確ではありません。 <TargetFrameworkVersion> 要素を使用します。 それをPropertyGroupのquot;Globals"というラベルのついたところに置いてください。

  <PropertyGroup Label="Globals">
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <others...>
  </PropertyGroup>


VS2012 以降は、General プロパティページに Platform Toolset 設定が追加された最初のバージョンの VS で、話が異なります。 3.5をターゲットとする適切なビルドを取得するには、"v90"を選択する必要があります。 しかし、これは不器用なことで、この選択を可能にするには、マシンにVSのすべての中間バージョンをインストールする必要があります。

なぜVS2008のインストールが必要なのかは、それ自体に説明が必要です。 核心的な問題は、Cランタイムライブラリ(msvcrt100.dll以上)にマネージドコードの実行をサポートするための.NETコードが含まれていることです。 重要なのは、C++/CLIコードを使用するプログラムでCRTが正しく初期化されるようにするためのモジュールイニシャライザーです。 このコードは常に.NET 4をターゲットとしており、msvcrt100.dll(およびそれ以降)にハードベイクされているため、v4.0.30319ランタイムに常に強固な依存関係を持ちます。 古いCランタイムであるmsvcrt90.dllを使用する場合、純粋なv2.0.50727への依存しか持ちえません。 msvcrt90.dllの依存関係があることを確認できるのは、VS2008のコンパイラーの#includeファイルを使用するときだけです。

すぐに.NET 4に移行することがかなり必要であるという冷厳な事実、そうしなければこのようなビルドの問題で苦労することになるでしょう。 .NET 4は、あなたが想像するすべてのターゲット上で無料で広く利用可能であるため、現実的な障害はほとんどありません。 より高いランタイムバージョンに移行することに関連するFUDを克服することは、一般的に本当の問題でしかありません。 恐怖や疑念を抱く理由はなく、安定しています。