パッケージの作り方
msdeploy パッケージは次のように作成します。
msdeploy.exe -verb:sync -source:iisApp=c:\content\ -dest:package=c:\pkg.zip
のc:\コンテンツディレクトリには単一のインデックス.htmlファイル。
結果
出力は次のようになります。
Info: Adding package (package).
Info: Adding child iisApp (c:\content\).
Info: Adding child createApp (c:\content\).
Info: Adding child contentPath (c:\content\).
Info: Adding child dirPath (c:\content\).
Info: Adding child filePath (c:\content\index.html).
Total changes: 6 (6 added, 0 deleted, 0 updated, 0 parameters changed, 0 bytes copied)
の内容を抜粋するとc:\pkg.zipディレクトリにc:\pkg次のようになります:
archive.xml
systemInfo.xml
Content\c_C
Content\c_C\content
Content\c_C\content\index.html
次のようにパッケージをダンプすると:
msdeploy.exe -verb:dump -source:package=c:\pkg.zip -xml
次のような結果になります:
<output>
<MSDeploy.iisApp>
<iisApp path="c:\content\">
<createApp
path="c:\content\"
isDest="False"
managedRuntimeVersion=""
enable32BitAppOnWin64=""
managedPipelineMode=""
applicationPool=""
appExists="True" />
<contentPath path="c:\content\">
<dirPath
path="c:\content\"
securityDescriptor="D:"
parentSecurityDescriptors=""
attributes="Directory">
<filePath
path="index.html"
size="0"
attributes="Archive"
lastWriteTime="07/07/2011 20:58:00"
securityDescriptor="D:" />
</dirPath>
</contentPath>
</iisApp>
</MSDeploy.iisApp>
</output>
私が望むように
パッケージがサイトファイルの現在の場所に依存することは望んでいません。パッケージを顧客に送るつもりですが、パッケージ化プロセスに関する詳細はパッケージと一緒に出荷したくありません。パッケージの内容はc:\pkg.zip次のようになります:
archive.xml
systemInfo.xml
Content\index.html
パッケージで IIS アプリケーションを作成できるようにしたいので、仮想パスが必要です。また、パッケージをデフォルトの場所にインストールしたいので、物理パスも変更する必要があります。ダンプは次のようになります。
<output>
<MSDeploy.iisApp>
<iisApp path="Default Web Site\Site">
<createApp
path="Default Web Site\Site"
isDest="False"
managedRuntimeVersion=""
enable32BitAppOnWin64=""
managedPipelineMode=""
applicationPool=""
appExists="False" />
<contentPath path="c:\inetpub\wwwroot\site">
<dirPath
path="c:\inetpub\wwwroot\site"
securityDescriptor="D:"
parentSecurityDescriptors=""
attributes="Directory">
<filePath
path="index.html"
size="0"
attributes="Archive"
lastWriteTime="07/07/2011 20:58:00"
securityDescriptor="D:" />
</dirPath>
</contentPath>
</iisApp>
</MSDeploy.iisApp>
</output>
私は変更しましたiisアプリそしてアプリを作成プロバイダーパス属性を にDefault Web Site\Site
変更しました。コンテンツパスそしてディレクトリパスプロバイダーパス属性は になりますc:\inetpub\wwwroot\site
。
質問
- どうすればこれを実現できるでしょうか?
ベストアンサー1
MS Deployの置換ルールを確認する必要があります。これは便利な機能です。MS Deploy チームのブログによく隠れている。
あなたの場合、次のような置換式の山でコマンド ラインを拡張する必要があります。
msdeploy.exe
-verb:sync
-source:iisApp=c:\content\
-dest:package=c:\pkg.zip
-replace:objectName=iisApp,targetAttributeName=path,
replace="Default Website\Site"
-replace:objectName=createApp,targetAttributeName=path,
replace="Default Website\Site"
-replace:objectName=contentPath,targetAttributeName=path,
replace="c:\inetpub\wwwroot\site"
-replace:objectName=dirPath,targetAttributeName=path,match="^c:\content",
replace="c:\inetpub\wwwroot\site"
これを実行すると、希望する出力が生成されます。
上記のサンプルでは、最初の3つの置換ルールはタグ名(objectName
)と属性名(targetAttributeName
)に一致し、指定された置換文字列で上書きします。最後の置換ルールは、「c:\content」で始まるすべてのタグのすべてのパス属性に一致しdirPath
、置換します。属性値のその部分のみ置換文字列を使用します。
最後に、パッケージの zip ファイルに元のソース フォルダー名が含まれないようにする方法が見つかりませんでした。唯一の回避策は、「c:\site」などの中立的な一時的な場所からパッケージ化することです。
手順は次のようになります。
- 中立的な一時的な場所にデータをコピーします。
- ここからパッケージを作成してください。
- 生成された XML を表示するには、動詞:dump を使用します。
- パッケージ内で変更したいすべての項目に対して置換ルールを追加して、パッケージを再度作成します。
- 頭痛薬を飲んでください ;-)