10

バックグラウンド

しばらく前に作成したいくつかの古い Visual Studio アプリケーションをオープン ソース化しています。新しい VS2012 環境を使用して新しいソリューションを作成し、プロジェクトを git リポジトリとしてセットアップしました。ソース コードに変更を加えることなく、Visual Studio 2012 ですべて正常に動作するようになりました。新しいプロジェクト構成で適切なライブラリをリンクしていることを確認するだけで済みました。

Github からプロジェクトをダウンロードする他のユーザーと最大限の互換性を持つように、これらのプロジェクトを構成したいと思います。このマシンには、最新の VS2012 バージョンとともに VS2010 がインストールされています。VS2012 の両方のプロジェクトですべてが正しく機能するようになった後、VS2010 でそれらを開こうとしました。

ビルドしようとすると、1 つのエラーが発生しました。

Specified platform toolset (v110) is not installed or invalid.
Please make sure that a supported PlatformToolset value is selected.    
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets  518

私が試したこと

そこで、プロジェクトのプロパティを開いて に移動するConfiguration Options --> Generalと、プラットフォーム ツールセットは実際に に設定されていましたVisual Studio 2012 (v110)。この入力はドロップダウン ボックスで、v110値は表示されません。代わりに 2 つの選択肢があります。

  • v100
  • v90

これらはそれぞれ VS2010 と VS2008 に対応しています。値を v100 に変更して再構築すると、エラーは発生せず、プログラムは Visual Studio 2010 環境で問題なく動作します。

プロジェクトを Visual Studio 2012 でバックアップして開くと、古いプロジェクト ファイルがあることが通知され、アップグレードするかどうかを尋ねられた場合は、はいと答えてアップグレードします。再構築して実行し、すべてがまだ機能していることを確認します。VS2012 で構成オプションを開くと、プラットフォーム ツールセットが Visual Studio 2012 (v110) に戻りますが、ドロップダウン入力をクリックすると、さらにいくつかの選択肢が表示されます。

  • ビジュアル スタジオ 2012 (v110)
  • v110_wp80
  • Visual Studio 2012 - Windows XP (v110_xp)
  • ビジュアル スタジオ 2010 (v100)
  • ビジュアル スタジオ 2008 (v90)
  • ‹親またはプロジェクトのデフォルトから継承›</li>

私の質問

これは私にいくつかの質問をもたらしました。私はそれらすべてをポーズするつもりです。できるだけ多くの情報が得られるとよいのですが、そのうちの 1 つだけに適切な回答があれば、問題が解決する可能性があります。

  • Visual Studio の新しいバージョンに固有の機能を使用していない場合、できるだけ多くのバージョン (つまり、2008、2010、または 2012) で変更せずに開いて実行できるソリューションをセットアップすることは可能ですか? もしそうなら、どのように?

  • Visual Studio 2012 内からプラットフォーム ツールセットを v90 (VS2008)に設定し、ビルドして実行できる場合、これは VS2012、VS2010、および VS2008 を使用しているユーザーに対してビルドおよび実行できることを意味しますか?

  • オプションは正確に何をし<inherit for parent or project defaults>ますか?プロジェクトのデフォルトはどのように設定されますか? これを使用して、インストールされているプラ​​ットフォーム ツールセットが機能するものを使用するように Visual Studio に指示できますか。

  • Visual Studio のPlatform Toolset以外に、他の開発環境との互換性を高めるために設定できるオプションはありますか?

4

1 に答える 1

6

これはややトリッキーな状況です。ここでの根本的な問題の 1 つは、VS2010 と VS2012 が MSBuild を使用して C++ プロジェクトをビルドしているのに対し、VS2008 はそれを VCBuild にファームアウトしたことです。これは、プロジェクト ファイルを比較するとわかります。VS2010/VS2012 は .vcxproj を使用し、VS2008 は .vcproj を使用します。

新しいバージョンの Visual Studio に固有の機能を使用していない場合、できるだけ多くのバージョン (つまり、2008、2010、または 2012) で変更せずに開いて実行できるソリューションをセットアップすることは可能ですか? もしそうなら、どのように?

最大限の互換性を得るには、最小公分母 (つまり、この場合は vc90) をターゲットにする必要があります。アップグレードを行うと、ソリューション ファイルとプロジェクト ファイルが最新バージョンにアップグレードされるため、古いバージョンの Visual Studio との互換性が失われる可能性があることに注意してください。

Visual Studio 2012 内からプラットフォーム ツールセットを v90 (VS2008) に設定し、ビルドして実行できる場合、これは VS2012、VS2010、および VS2008 を使用しているユーザーに対してビルドおよび実行できることを意味しますか?

上記の .vcxproj / .vcproj の競合のため、そうではありません。

たとえば、現在、一連の .vcxproj ファイルと VS2010 用に設計されたソリューションがあります。私は VS2012 を IDE として使用しているため、VS2012 で VS2010 ソリューションを開くときは、アップグレードせずにそのまま開くことを選択します。VS2012 以降は、プロジェクト ファイルに関する限り、VS2010 と後方互換性があるはずです。

開発環境で最大限の互換性を得るには、VS2010 のソリューションをベースラインとして使用し、v100 をターゲットにすることをお勧めします。開発者はそれよりも新しいバージョンを使用でき、すべてが正常に連携するはずです。

于 2013-11-29T19:39:17.010 に答える