我正在尝试设置一个 TFS 2012 构建定义,它将构建一个解决方案并在该解决方案中部署多个 Web 应用程序。我遇到了这篇文章,它似乎准确地解决了我正在尝试做的事情,并且似乎也同意这里提到的解决方案。
因此,我尝试按照该文章中的描述实现构建定义/项目配置,但无论我做什么,似乎都忽略了我放入 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 中而不是在 csproj 文件中定义 MsDeployServiceUrl。这解决了上述错误,但随后我收到此错误:
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 行,但这似乎并没有解决问题。
更新:
好的,TFS 似乎无法识别解决方案中定义的配置。当我在构建定义中选择“要构建的配置”时,对话框中配置列中的下拉列表仅显示默认的“调试”和“发布”。我们的解决方案中定义了六种左右的其他配置,这些配置没有出现。我尝试手动输入配置,甚至仔细检查拼写是否正确。它构建,但不使用正确的配置(应用了错误的 Web.config 转换)。这解释了为什么它没有从项目文件中正确的 PropertyGroup 读取构建属性。
这可能是我们的 TFS 安装/配置的问题吗?解决方案定义的配置是否应该显示在该下拉列表中,或者您是否总是必须在第一次手动输入自定义配置名称?