【.Net】MsBuildでIISにデプロイする

2020年2月17日

結構はまったので備忘録として載せておきます。
前提として、Webサーバにデプロイ用のユーザーが作成済みで、ソース管理サーバからVisual Studioの発行で、プロファイルが作成済みの状態からスタートしています。

コマンドラインからプロファイルの設定

まずはまった内容としては、コマンドラインからmsbuildでプロファイルの設定方法がわからないということです。
※ただオプション知らなかっただけでした。。。
以下のようなオプションが必要になります。

/p:PublishProfile=[ここにプロファイル名設定すればOK]

上記のような感じで、オプションで設定すればOKです。
ちなみにパスとかではないです。
プロファイル名なので、/p:PublishProfile=CustomProfile みたいな感じで設定してあればOKです。

デプロイ先のサーバの認証が通らない

次にはまったのが、プロファイルを設定したのに、認証がうまく通らないということです。
プロファイル作成するときにユーザー名、パスワード設定したから、コマンドからプロファイル指定してあれば認証大丈夫だろうと思っていたのですが、そうではないみたいでした。
生成されたプロファイルとか確認してみると、「.pubxml」と「.pubxml.user」っていう二つのファイルが出力されていて、「 .pubxml.user 」に暗号化されたパスワードが保存されていました。
おそらくコマンドラインから実行する際には「 .pubxml.user 」まで見ていないのですかね、、、
以下のオプションが必要でした。

/p:Password=[ユーザーパスワード]

デプロイはできたけどサイト開かない

最後にはまったのが、デプロイしたのにサイトが開かないということです。
うまく行ったデプロイのbinと、うまく行かなかったデプロイのbinを比較して差分見ながら原因辿りました。
どうやらリリースモードでうまくデプロイできていないみたい?でした。
これもプロファイルに設定していると思っていたけれど。。。
オプションで以下のような指定が必要でした。

/p:Configuration=Release

まとめ

.csprojファイルがあるディレクトリに移動した状態で、

MSBuild [プロジェクト名] /t:Build /p:DeployOnBuild=true /p:DeployTarget=WebPublish /p:PublishProfile=[プロファイル名] /p:AllowUntrustedCertificate=True /p:Password=[ユーザーパスワード] /p:Configuration=Release

みたいにすれば行けました。
ただいろいろ試しながらやっていたので、オプション系は余計なものが存在しているかもしれません。