我正在尝试设置一个 TFS 2012 构建定义,该定义将构建一个解决方案并在该解决方案中部署多个 Web 应用程序。我碰到本文 http://chriskadel.com/2013/03/20/using-tfs-to-build-and-deploy-during-the-build-process-with-ms-deploy/这似乎正是解决了我正在尝试做的事情,并且似乎也同意提到的解决方案here https://stackoverflow.com/questions/6457108/how-to-tell-tfs-to-deploy-multiple-webapps-containing-in-one-solution.
因此,我尝试实现该文章中描述的构建定义/项目配置,但无论我做什么,它似乎都会忽略我放入 csproj 文件的特定配置属性组中的参数,如下所示:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'MyConfig|AnyCPU' ">
...
<DeployIisAppPath>My Website Name</DeployIisAppPath>
<MsDeployServiceUrl>MyWebServer</MsDeployServiceUrl>
</PropertyGroup>
对于我尝试部署的每个项目,我都会收到以下错误:
Web Deploy publish/package validating error: Missing or Invalid property value for $(MsDeployServiceUrl)
因此,我尝试在构建定义的 MSBuild Arguments 中定义 MsDeployServiceUrl,而不是在 csproj 文件中。这解决了上述错误,但随后我收到此错误:
The “ConcatFullServiceUrlWithSiteName” task was not given a value for the required parameter “SiteAppName”.
因此,它也不会从 csproj 文件中读取 DeployIisAppPath 参数,而且我无法将其移至 MSBuild Arguments 行,因为它对于我尝试部署的每个项目都不同。
部署过程几乎不知道我正在构建哪个配置,因此它无法在 csproj 文件中找到正确的 PropertyGroup 来读取参数。但是,我已在构建定义的“Configurations to Build”行中指定了配置,并且还尝试将 /p:Configuration=MyConfig 添加到 MSBuild Arguments 行,但这似乎并不能解决问题。
Update:
好的,TFS 似乎无法识别解决方案中定义的配置。当我在构建定义中选择“要构建的配置”时,对话框中“配置”列中的下拉列表仅显示默认的“调试”和“发布”。我们的解决方案中定义了大约六种其他配置,但没有显示。我尝试手动输入配置,甚至仔细检查拼写是否正确。它可以构建,但没有使用正确的配置(应用了错误的 Web.config 转换)。这解释了为什么它不从项目文件中正确的 PropertyGroup 读取构建属性。
这可能是我们的 TFS 安装/配置有问题吗?解决方案定义的配置是否应该显示在该下拉列表中,或者您是否始终必须在第一次手动输入自定义配置名称?