この場合、MSBuildプロパティVisualStudioVersion=11.0を指定する必要があります。これについてはhttp://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspxでブログに書いたところですが、便宜上、以下にも貼り付けました。
Visual Studio 2012で最も要望の多かった機能の1つは、VS2012とVS2010の両方でプロジェクトを開く機能でした(VS 2010 SP1が必要です)。聞いたことがない場合は、その機能を実装しました。あなたは私たちがこれをどのように行うことができたのか、そしてこれがあなたにどのような影響を与えるのか疑問に思うかもしれません。
VS2010で作成されたWebプロジェクトの.csproj/.vbprojを開くと、次のインポートステートメントが表示されます。
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\
v10.0\WebApplications\Microsoft.WebApplication.targets" />
このプロジェクトをVS2012で開くと、プロジェクトファイルにいくつかの変更が加えられ、VS2010SP1とVS2012の両方で開くことができるようになります。VS2012で最初にロードされたときにプロジェクトに加えられた変更の1つそのインポートステートメントを置き換えるために以下を追加することです。
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
ハードコードされた10.0を削除し、代わりにプロパティVisualStudioVersionを使用しました。Visual Studio 2012でビルドする場合、この値は常に11.0になりますが、VS2010の場合は存在しません。そのため、デフォルトで上記の10.0に設定しました。コマンドラインからビルドするには、このプロパティを明示的に設定する必要があるシナリオがいくつかあります。そこに着く前に、このプロパティがどのように設定されるかを説明しましょう(この順序で)
- VisualStudioVersionが環境変数/グローバルMSBuildプロパティとして定義されている場合は、それが使用されます。
- これは、VSおよびVS開発者コマンドプロンプトがこの値を設定する方法です。
- .slnファイルのファイル形式バージョンに基づきます(使用されるツールセットはslnファイル形式–1です)
- このステートメントを単純化するために、.slnファイルは、.slnファイルを作成したVSのバージョンの値にVisualStudioVersionを指定してビルドされます。
- デフォルトを選択
- VS2010がインストールされている場合は10.0
- インストールされている最高バージョンのサブツールセットバージョン
#2の場合、.slnファイルを作成するとき、VisualStudioVersionの値は.slnファイルにあるフォーマットバージョンの-1になります。ここで注意すべき重要な点は、.slnファイルをビルドすると、.slnファイルを作成したVSのバージョンに対応するVisualStudioVersionの値でビルドされることです。したがって、VS2012で.slnファイルを作成し、常にその.slnファイルを作成する場合、VisualStudioVersionの値は11.0になります。多くの場合、.slnファイルを作成すれば問題ありません。
.slnファイルを経由せずに.csproj/.vbprojファイルを作成している場合はどうなりますか?(開発者プロンプトではなく)コマンドラインからWebプロジェクトをビルドする場合、使用されるVisualStudioVersionの値は10.0になります。これは、上で示したプロパティのアーティファクトです。この場合、これをMSBuildプロパティとして渡す必要があります。例えば
msbuild.exe MyAwesomeWeb.csproj /p:VisualStudioVersion=11.0
この場合、プロパティを明示的に渡します。これは、VisualStudioVersionの値を決定するために、他のメカニズムを常にオーバーライドします。ビルドスクリプトでMSBuildタスクを使用している場合は、Properties属性またはAdditionalProperties属性のいずれかでプロパティを指定できます。プロパティとAdditionalPropertiesの違いについては、以前のブログ投稿を参照してください。
ビルド/公開中におかしな動作が発生し、間違った.targetsファイルがインポートされていることに気付いた場合は、このプロパティを指定する必要があります。