我一直在尝试让msbuild生成正确的Web部署包,以便我可以查看应用程序池标识的值。
在我的项目中,我有了带有以下用户和密码条目的parametes.xml:
<parameter name="username" description="AppPool identity username" defaultValue="domain\username">
<parameterValidation type="RegularExpression" validationString="(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$" />
<parameterEntry type="DeploymentObjectAttribute" scope="processModel" match="/processModel/@userName" />
</parameter>
<parameter name="password" description="AppPool identity password" tags="password" defaultValue="DefaultPassword">
<parameterEntry type="DeploymentObjectAttribute" scope="processModel" match="/processModel/@password" />
</parameter>
我使用的msbuild命令:
"C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/MSBuild.exe" "./TestSolution.sln"
/p:configuration="Release"
/p:outdir=".././deploy/Packages/Release"
/target:clean;build
/p:DeployOnBuild=true;
DeployTarget=Package;
IncludeAppPool=true;
IncludeIisSettings=true;
DeployEncryptKey=Password
正确生成包,但问题在于置于压缩文件夹内的新parameters.xml。用户名/密码条目已更改为:
<parameter name="Username" description="Identity Username" defaultValue="domain\username" />
<parameter name="Password" description="Identity Username Password" defaultValue="DefaultPassword" tags="password" />
如您所见,已删除parameterEntry和Validation。如果我尝试使用msdeploy部署应用程序并在SetParameters中设置用户名和密码,则它不会为ApplicationPool戳新值。
如果我手动将删除的行添加回包中,则部署正常,应用程序池将获取SetParameters文件中的标识集。
这是设计的吗?有没有办法强制msdeploy在构建包时不删除这些行?
我花了几天的时间试图让它发挥作用,我遇到的任何例子都没有解决这个问题。
希望有人可能有一些见解。
答案 0 :(得分:2)
终于找到了问题!
这是参数定义的方式。如果您查看Parameters.xml,我将使用以下方法定义所有内容:
<parameterEntry type=
将所有“type”更改为“kind”会生成正确的package parameters.xml并启用应用程序标识戳。
这是因为我使用了IIS论坛上发布的代码:
http://forums.iis.net/t/1176867.aspx
这个应用程序似乎不正确。不确定它是否有版本差异或其他。