12

Web Deploy 3 の (ほとんど完全に文書化されていない) 「パブリック API」を使用して、Web サイトの .zip パッケージを作成し、それをサーバーに同期しています。

DeploymentBaseOptions destinationOptions = new DeploymentBaseOptions()
{
       UserName = //username,
       Password = //password,
       ComputerName = //a server
};

using (var deploymentObject = DeploymentManager.CreateObject(DeploymentWellKnownProvider.Package, "C:/MyWebsitePackage.zip"))
{
       deploymentObject.SyncParameters.Load(packageParametersFile); \\ contains some connection string information and nothing more.
       DeploymentSyncOptions syncOptions = new DeploymentSyncOptions();

       syncOptions.WhatIf = false;

       deploymentObject.SyncTo(destinationOptions, syncOptions);
}

このコードは、運用サーバーとビルド サーバーに .NET 4.5 をインストールし、デプロイするプロジェクトも 4.5 にアップグレードするまでは完全に機能していました。現在、次のエラーが発生しています。

使用しようとしているアプリケーション プールには、「managedRuntimeVersion」プロパティが「v4.0」に設定されています。このアプリケーションには「v4.5」が必要です。詳細については、http: //go.microsoft.com/fwlink/?LinkId=221672#ERROR_APPPOOL_VERSION_MISMATCHを参照してください。

私たちのサーバーには間違いなく.Net 4.5がインストールされており、IIS Webサイトアプリケーションプールのバージョンは「.NET Framework v4.0.30319」です(v4と表示されていることは知っていますが、.NET 4.5は「インプレース」アップグレードであり、4.0 DLLを新しいバージョン番号 .30319)。

/p:VisualStudioVersion=11.0フラグ(別の Web アプリケーション ターゲット ファイルが何らかの方法で .NET 4.5 アプリケーションの展開を可能にするために使用されます)。

Web Deploy API がこのように不平を言う理由と、MSBuild ソリューションと同じ方法でこのエラーを解決する方法を知っている人はいますか?

4

2 に答える 2

11

最も簡単なのは、Microsoft.Web.Publishing.targets の IgnoreDeployManagedRuntimeVersion プロパティを .csproj に含めるか、/t:package ステップで MSBuild のパラメーターとして含めることです。その他のオプションは、プロジェクト ルートの parameters.xml で managedRuntimeVersion を MSDeploy パラメーターで上書き可能にするか、展開前の手順として archive.xml の .zip に直接設定することです。

更新 (コメントとして返信するには長すぎます):

まあ、それはVS 2012自体が行うことよりもハックではありません. VS から IIS への公開 (Web 配置オプション) を実行すると、生成されるパッケージは一時フォルダーのコンテンツとパラメーター xml になり、一般的なパッケージングを行うときに取得する zip ではなく、ランタイム バージョンが設定されます。プロジェクトが4.5であっても4に。IgnoreDeployManagedRuntimeVersion は単にそれを完全に省略します。VS から Web Deploy Package オプションを実行すると、archive.xml で 4.5 の zip が取得され、VS が出力した zip を手動で IIS に直接インポートしようとすると、4.0 vs 4.5 アプリ プールでエラー ポップアップが表示されます。エラーは、コマンド ラインから msbuild /t:package および msdeploy :sync を実行した場合と同じです。VS (devenv) はそれを「正しく」実行せず、プロジェクト設定を静かに上書きし、MSDeploy ではありません。

ちなみに、API ドキュメントに関しては、はい、実際には存在しませんが、コマンド ライン ドキュメントは許容できると思います (MSDeploy ではなく Web Deploy と呼ばれます。例: http://technet.microsoft.com/en-us/library/dd569089.aspxおよびその他)、それらを dotPeek 出力に精神的にマッピングすると、少し役立ちます。

于 2012-11-30T16:15:50.397 に答える
4

これをプロジェクトに追加してみてください:

<IgnoreDeployManagedRuntimeVersion>True</IgnoreDeployManagedRuntimeVersion>
于 2013-07-20T20:39:22.777 に答える