【发布时间】:2011-05-11 18:09:01
【问题描述】:
我正在将一个 Web 应用程序包从 MSBuild 命令行部署到 IIS6 上的 MSDepSvc,使用基本身份验证的以下命令可以正常工作:
MSBuild.exe Web.csproj
/p:Configuration=Debug
/p:DeployOnBuild=True
/p:DeployTarget=MSDeployPublish
/p:MsDeployServiceUrl=http://[server name]/MsDeployAgentService
/p:DeployIisAppPath=DeploymentTestProject
/p:MSDeployPublishMethod=RemoteAgent
/p:CreatePackageOnPublish=True
/p:username=***
/p:password=***
但是,我真正想做的是删除用户名和密码参数,并以当前用户的身份回退到集成身份验证。此命令将进入构建服务器,我不希望在目标环境(MsDepSvc 所需)上具有管理员权限的帐户的纯文本凭据可见。我找不到任何有关如何执行此操作的文档,并且在我尝试发布时丢弃凭据返回 401 未经授权。
特别令人沮丧的是,我可以愉快地在带有集成身份验证的包中运行部署命令(只是不包括凭据),但我似乎无法从 MSBuild 命令行运行它。我正在尝试将包和部署流程封装到一个命令中而不编辑构建文件,这是目前唯一的方法。
有什么想法吗?
编辑 在与 Sayed 讨论并深入了解命令行输出后,在执行上面的 MSBuild 命令(没有用户名和密码参数)之后,正在调用以下 MSDeploy 命令:
msdeploy.exe
-source:package='[project path]\Web\obj\Debug\Package\Web.zip'
-dest:auto,ComputerName='http://[server]/MsDeployAgentService',UserName='***',IncludeAcls='False',AuthType='NTLM'
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-retryAttempts=2
您可以看到正在设置 UserName 属性,其值为当前登录用户的用户名。如果我把它拿出来直接运行上面的命令,部署就很好了。
那么在此基础上,为什么原来的 MSBuild 命令在调用 MSDeploy 时会插入 UserName 属性?这似乎是现在唯一的障碍。
【问题讨论】:
-
如果将 UseMSDeployExe 设置为 true,该命令是否不包含 AuthType=NTLM???
-
实际上,当我从 Visual Studio 发布到同一域上的另一台机器时,我遇到了挑战。输入我已经登录的凭据后,发布正常,底层 MSBuild 命令显示 AuthType='NTLM',但也包括我的凭据。所以我有点回到原来的命令了!
-
对于 Visual Studio 2012,您需要完全省略 /P:UserName 属性。