この記事に従って、WebDeploy 2.0 用にサーバーを正しく構成したと仮定しています。
Web 配置を構成する (IIS.NET)
注: MS は Web Deploy 2.0 の更新をリリースしたため、元のリンクはもはや有効ではありません。これを更新しましたが、時間の経過とともに移動するターゲットになると思います.
また、開発/ビルド/CI マシンに Web Deploy 2.0 をインストールする必要があります。
まだ 1.0 を使用している場合は、アップグレードすることをお勧めします。2.0 には大幅な改善がいくつかあります。
Visual Studio 2010 の発行機能の使用:
Visual Studio は、サイトを右クリックして [公開] を選択することで、サイトを公開できます。これにより、次のダイアログが表示されます。
Visual Studio 2010 と WebDeploy 2.0 にはいくつかの問題があります。1 つ目は、VS2010 が WebDeploy/MSDeploy 2.0 に対応していないことです。したがって、公開しようとすると、次のようなエラーが発生します。
エラー 1 Web 配置タスクが失敗しました。((04/02/2011 12:30:40) リモート コンピューターで要求が処理されたときにエラーが発生しました。)
C:\inetpub\logs\wmsvc\TracingLogFiles\W3SVC1
これがオンになっていると仮定すると、サーバー上の Web 管理サービスの Failed Request Tracing に次のエラーも表示されます。
AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
eventData トレース展開エージェントの例外。リクエストID「」。要求のタイムスタンプ: '02/04/2011
System.UnauthorizedAccessException: パス 'D:\' へのアクセスが拒否されました。
ドライブ文字は、IIS サイトが配置されているドライブによって異なります。
デフォルトでは、GUI 内パブリッシュ メカニズムは、間違ったバージョンの MSDeploy (1.0) を使用するようにデフォルト設定されています。VS2010 に MSDeploy 2.0 を使用するように指示します。これを行うには、次の場所にある Visual Studio 2010 のファイルを編集します (デフォルトドライブのインストールdevenv.exe.config
を行ったと仮定します)。c:\
64 ビット システムの場合: c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
32 ビット システムの場合:c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
devenv.exe.config
お気に入りの XML エディター (私は Visual Studio 2010 自体を使用しました) で開き、次の xml をコピーします。
<dependentAssembly>
<assemblyIdentity
name="Microsoft.Web.Deployment"
publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="7.1.0.0" newVersion="8.0.0.0"/>
</dependentAssembly>
/configuration/runtime/assemblyBinding
これをセクションに追加します。
これが完了したら、Visual Studio 2010 のすべてのインスタンスを閉じて、この変更を有効にします。VS2010 を再起動し、Web プロジェクトを開いてから、もう一度公開してみてください。今度は成功するはずです。
ビルド パッケージを使用した公開:
Visual Studio は、コマンド ラインから実行できるビルド パッケージを生成できます。これは を使用して生成されProject -> Build Deployment Package
ます。継続的インテグレーションなどに便利です (msbuild を使用して/t:Package
スイッチを使用してパッケージを生成することもできます)。
通常、パッケージの出力フォルダーはデフォルトでobj\Package
.
残念ながら、Visual Studio 2010 はこれを少し間違っており、1.0 を対象とし、サイト レベルではなくサーバーでの展開を対象とする msdeploy ラッパー バッチ スクリプトを生成します。
独自の msdeploy.exe コマンド ラインを作成する以外に、これを簡単に修正する方法はありません。もう少し読みやすくするために、これを複数の行に分割しました。
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe"
-source:archiveDir='d:\sites\DemoApp\obj\Package\Archive'
-宛先:
自動、
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename',
userName='デモサイト',
password='somepassword',
authtype='ベーシック',
includeAcls='False'
-動詞:同期
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"d:\sites\DemoApp\obj\Package\Archive.SetParameters.xml"
-信頼されていないことを許可する
最初に注意することは、へのパスmsdeploy.exe
です。Visual Studio は、バージョン 1.0 へのパスを生成します。これを 2.0 を使用するように変更しました。
注目すべきパラメータ:
-source:archiveDir=
パッケージを展開していることを msdeploy に伝え、ローカルの場所を提供します
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename'
- これにより、MSDEPLOY が IIS7 上の特定のサイトに展開するように指示されます。yoursitename
IIS のサイトの名前と正確に一致する必要があります。
userName
are は、password
サイトの委任された管理者ユーザーの名前です。これは、サイト レベルで「IIS マネージャーのアクセス許可」機能を使用して構成されます。アカウントは、ローカルの Windows ユーザー アカウントである必要があります。
-authtype='basic'
- これにより基本認証が強制され、それ以外の場合は NTLM 認証が試行されます。
-allowuntrusted
- 組み込みの自己署名 SSL 証明書を使用する場合、SSL 証明書エラーは無視されます。
そのコマンド ラインを使用すると、リモート IIS7 サーバーに正常に展開できるはずです。
生のコンテンツの公開:
ローカル フォルダーから直接、静的コンテンツ (またはクラシック ASP または PHP サイト) を公開したい場合があります。msdeploy.exe
次のコマンドラインを使用してこれを行うことができます。
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe"
-source:contentPath='d:\websites\mysite'
-宛先:
contentPath='あなたのサイト名',
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename',
userName='デモサイト',
password='somepassword',
authtype='ベーシック',
includeAcls='False'
-動詞:同期
-信頼されていないことを許可する
-dest:contentPath
と についても、前と同じ規則が適用されますcomputerName
。
MSDeploy のバージョンの問題は SP1 で解決されると思います (まだ見る機会がありませんでした)。
最後の VS2010 の落とし穴:
Visual Studio 2010 を使用して公開する場合、"Publish" ビルド パッケージにより、サイトの匿名アカウントの ACL がすべてのファイルとフォルダーに対して読み取り専用に変更されますが、App_Data
フォルダーは読み取りと書き込みに変更されます。
.csproj
これは、各の下のファイルに次の設定を追加することで回避できます<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
。
<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>
または、msbuild を使用している場合:
msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False
ここから便利なナゲットを見つけました:
Visual Studio 2010 展開パッケージで ACL の設定をスキップする(元のコンテンツが利用できなくなったため、WayBackMachine リンク)