dirPath プロバイダーを使用して、Windows アプリケーションをリモート サーバー上の特定のパスにデプロイしようとしています。次のような構文を使用して、この同じサーバーに問題なく Web サイトを展開できます。
msdeploy.exe -verb:sync -source=iisApp=C:\SomePath -dest:authType=basic,wmsvc=MyServer,userName=MyUser,password=MyPassword,iis=MySite/MyApp -allowUntrusted
ただし、dirPath を使用して同様のコマンドを実行しようとすると、(不明な理由で) 401 Unauthorized エラーが発生します。
msdeploy.exe -verb:sync -source=dirPath=C:\SomePath -dest:authType=basic,wmsvc=MyServer,userName=MyUser,password=MyPassword,dirPath=C:\SomeRemotePath -allowUntrusted
ここで機能することがわかった唯一のことは、次のように computerName 構文の使用に切り替えることです。
msdeploy.exe -verb:sync -source=dirPath=C:\SomePath -dest:authType=basic,computerName=https://MyServer:8172/msdeploy.axd?site=MySite,userName=MyUser,password=MyPassword,dirPath=C:\SomeRemotePath -allowUntrusted
これは問題ありませんが、computerName ではサイトをクエリ文字列パラメーターとして渡す必要があり、この場合の "MySite" は実際には "既定の Web サイト" です。MSBuildファイルを使用して実際にこのコマンドラインを生成している(そしてExecステートメントで実行している)ことを考えると、ここでスペースを適切にエスケープする方法を理解することはできません。MSBuild ファイル (たとえば、Default%20Web%20Site) で %20 を指定すると、コマンドを実行する前にスペースに解決されるため、構文が無効になります。ダブル エスケープ (%、2、および 0 を個別にエスケープする、例: Default%25%32%30Web%25%32%30Site) を試みると、401 Unauthorized エラーに戻ります。
問題のある (避けられない?) サイト クエリ パラメータを必要としない場合、このコマンドで "wmsvc=[server]" を使用できる構文またはサーバー構成はありますか? または、上記の MSDeploy コマンドを実行している MSBuild Exec コマンド内で "?site=Default Web Site" を適切にエスケープする方法を教えてもらえますか?
編集:誰かがデフォルトの Web サイトの名前をスペースのない名前に変更することを提案する前に、はい、それは機能しますが、デフォルトの名前で機能する一般的なソリューションが必要なため、それを回避する方法を見つけようとしています特定のサーバー上の IIS Web サイトの。