web-dev-qa-db-ja.com

.NET 4.5へのアップグレード後にMSBuildのデプロイが失敗する

最近、VS 2010および.NET 4アプリケーションをVS 2012および.NET 4.5にアップグレードしました。テストサーバーにアプリケーションを展開するビルドスクリプトがあります。 2つのボックスがあります。1つはVS 2012を備えたWindows 8(新規インストール)で、もう1つはVS 2010およびVS 2012を備えたWindows 7(新しくインストールされた)です。

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

"C:\ Achinth\Build\Work\build\qa1sb.proj"(DeployAllターゲット)(1)-> "C:\ Achinth\Build\Work\App\App.csproj"(ResolveReferences; MsDeployPublishターゲット)(2) ->(MSDeployPublishターゲット)-> C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3847,5):error:Web deployment task failed。( (2012年8月19日6:23:41 PM)要求がリモートコンピューターで処理されたときにエラーが発生しました。)[C:\ Achinth\Build\Work\App\App.csproj] C:\ Program Files(x86 )\ MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3847,5):エラー:\ r [C:\ Achinth\Build\Work\App\App.csproj] C:\プログラムファイル(x86)\ MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3847,5):エラー:(8/19/2012 6:23:41 PM)エラーが発生したとき要求はリモートコンピューターで処理されました。\ r [C:\ Achinth\Build\Work\App\App.csproj] C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft。 Web.Publishing.targets(3847,5):エラー:アプリケーションプールt使用しようとしている帽子は、「managedRuntimeVersion」プロパティが「v4.0」に設定されています。このアプリケーションには「v4.5」が必要です。 [C:\ Achinth\Build\Work\App\App.csproj]

エラーを見ると、MSBuildがVS 2012ではなくVS 2010のターゲットを使用しているように見えるため、エラーが発生しています。 Windows 8ボックスにはVS 2010がないため、VS 2012ターゲットを正しく使用しています。

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

47
Achinth Gurkhi

この場合、MSBuildプロパティVisualStudioVersion = 11.0を指定する必要があります。 http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx でこのことについてブログに書いたばかりです。

Visual Studio 2012で最も要求された機能の1つは、VS 2012とVS 2010の両方でプロジェクトを開く機能でした(VS 2010 SP1が必要です)。聞いたことがない場合は、その機能を実装しました。あなたは、私たちがこれをどのように行うことができ、これがあなたにどのような影響を与えるか疑問に思うかもしれません。

VS2010で作成されたWebプロジェクトの.csproj/.vbprojを開くと、次のインポートステートメントが表示されます。

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\
                  v10.0\WebApplications\Microsoft.WebApplication.targets" />

VS 2012でこのプロジェクトを開くと、VS 2010 SP1とVS 2012の両方で開くことができるように、プロジェクトファイルにいくつかの変更が加えられます。以下を追加して、そのimportステートメントを置き換えます。

<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になりますが、VS 2010には存在しません。そのため、デフォルトで上記の10.0に設定しました。コマンドラインからビルドする場合、このプロパティを明示的に設定する必要があるシナリオがいくつかあります。そこに着く前に、このプロパティがどのように設定されるかをこの順序で説明しましょう

  1. VisualStudioVersionが環境変数/グローバルMSBuildプロパティとして定義されている場合は、それが使用されます。
    • これは、VSおよびVS開発者コマンドプロンプトがこの値を設定する方法です。
  2. .slnファイルのファイル形式バージョンに基づいています(使用されるツールセットはslnファイル形式–1)
    • このステートメントを簡素化するために、.slnファイルは、.slnファイルを作成したVSのバージョンの値にVisualStudioVersionを指定してビルドされます。
  3. デフォルトを選択してください
    • VS 2010がインストールされている場合は10.0
    • インストールされている最高バージョンのサブツールセットバージョン

#2の場合、.slnファイルをビルドするとき、VisualStudioVersionの値は.slnファイルで見つかった形式バージョンの-1になります。ここで注意すべき重要なことは、.slnファイルをビルドすると、.slnファイルを作成したVSのバージョンに対応するVisualStudioVersionの値でビルドされることです。したがって、VS2012で.slnファイルを作成し、その.slnファイルを常にビルドすると、VisualStudioVersionの値は11.0になります。多くの場合、.slnファイルを作成すれば十分です。

.csproj/.vbprojファイルを.slnファイルを介さずに構築している場合(開発者プロンプトではなく)コマンドラインからWebプロジェクトをビルドする場合、使用されるVisualStudioVersionの値は10.0になります。これは、上で示したプロパティの成果物です。この場合、これをMSBuildプロパティとして渡す必要があります。例えば

msbuild.exe MyAwesomeWeb.csproj /p:VisualStudioVersion=11.0

この場合、プロパティを明示的に渡します。これは、VisualStudioVersionの値を決定する他のメカニズムを常にオーバーライドします。ビルドスクリプトでMSBuildタスクを使用している場合は、Properties属性またはAdditionalProperties属性でプロパティを指定できます。 PropertiesとAdditionalPropertiesの違いに関する以前のブログ投稿を参照してください。

ビルド/公開時におかしな動作が発生し、間違った.targetsファイルがインポートされていることに気付いた場合、このプロパティを指定する必要があります。

58

from このリンク

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

<IgnoreDeployManagedRuntimeVersion>True</IgnoreDeployManagedRuntimeVersion> 

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

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

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

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

41

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"」が効果的に強制され、問題が解決します。

2
sevzas

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

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

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

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

2
misterduck

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

http://www.Microsoft.com/en-ca/download/confirmation.aspx?id=252

0
mithun_daa