47

最近、VS2010および.NET4アプリケーションをVS2012および.NET4.5にアップグレードしました。テストサーバーにアプリケーションをデプロイするためのビルドスクリプトがあります。2つのボックスがあります。1つはVS2012を搭載したWindows8(新規インストール)で、もう1つはVS2010およびVS2012を搭載したWindows7(新規インストール)です。

Windows 8からビルドスクリプトを実行すると、ボックスビルドスクリプトが正常に機能し、アプリケーションをテストサーバーにデプロイします。しかし、Windows 7ボックスからアプリケーションを展開すると、次のエラーが発生します。

\ Achinth \ Build \ Work \ App \ App.csproj] C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets(3847,5):エラー:使用しようとしているアプリケーションプールでは、「managedRuntimeVersion」プロパティが「v4.0」に設定されています。このアプリケーションには「v4.5」が必要です。[C:\ Achinth \ Build \ Work \ App \ App.csproj]

エラーを見ると、MSBuildがVS2012ではなくVS2010ターゲットを使用しているように見えます。これがエラーの原因です。Windows8ボックスにはVS2010がないため、VS2012ターゲットを正しく使用しています。

誰かがMSBuildに正しいバージョンを選択させる方法についてのポインタを提供できますか?

4

5 に答える 5

57

この場合、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に設定しました。コマンドラインからビルドするには、このプロパティを明示的に設定する必要があるシナリオがいくつかあります。そこに着く前に、このプロパティがどのように設定されるかを説明しましょう(この順序で)

  1. VisualStudioVersionが環境変数/グローバルMSBuildプロパティとして定義されている場合は、それが使用されます。
    • これは、VSおよびVS開発者コマンドプロンプトがこの値を設定する方法です。
  2. .slnファイルのファイル形式バージョンに基づきます(使用されるツールセットはslnファイル形式–1です)
    • このステートメントを単純化するために、.slnファイルは、.slnファイルを作成したVSのバージョンの値にVisualStudioVersionを指定してビルドされます。
  3. デフォルトを選択
    • 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ファイルがインポートされていることに気付いた場合は、このプロパティを指定する必要があります。

于 2012-08-19T21:11:58.077 に答える
41

このリンクから。

"テキストエディタで*.csprojまたは*.vbprojWebプロジェクトファイルを開き、次の行を追加します。

<IgnoreDeployManagedRuntimeVersion>True</IgnoreDeployManagedRuntimeVersion> 

行の直前に行を追加しました

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

エラーなしでデプロイされます。」

それは私のために働いた。

于 2012-10-24T00:44:07.853 に答える
2

VS2012 Publish Web Deploy Package機能を使用すると、.zipファイルが生成されることを確認しました。そのzip内には、属性'managedRuntimeVersion="v4.0"'を持つcreateAppタグを含むarchive.xmlというファイルがあります。msdeploy.exeを使用してiisインスタンスに同期すると、機能します。

ただし、msbuild.exeを使用してWebパッケージの.zipファイルを作成すると、「managedRuntimeVersion="v4.5"」を持つarchive.xmlが含まれています。msdeploy.exeを使用してこのWebパッケージをIISに展開しようとすると、ERROR_APPPOOL_VERSION_MISMATCHエラーが発生します。

Sayed Ibrahim Hashimiがここで説明したように、msbuild.exeコマンドラインに「/p:VisualStudioVersion=11.0」を追加すると、結果のWebパッケージのarchive.xmlに「managedRuntimeVersion = "v4.0"」が効果的に強制されるため、問題が解決します。

于 2013-10-25T20:07:27.023 に答える
2

msdeploy / webdeployが同様のエラーを表示する理由を検索しているこのページを見つけた人にとって、これが解決策であることがわかりました。

この問題を修正するには、DeployManagedRuntimeVersionプロパティをVSプロジェクトに追加するだけです。

<targetframeworkversion>v4.5</TargetFrameworkVersion></code>
<DeployManagedRuntimeVersion>v4.0</DeployManagedRuntimeVersion>

ここから: http ://techblog.dorogin.com/2013/11/deploying-45-projects-with-webdeploy.html

于 2014-10-22T01:00:11.010 に答える
0

私の場合、WebDeployはビルドサーバーにインストールされていません。したがって、同様のエラーが発生しました。私はWebDeployをインストールしましたが、私は金色でした。

http://www.microsoft.com/en-ca/download/confirmation.aspx?id=25230

于 2015-08-24T21:06:37.023 に答える