3

我正在尝试设置一个 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 安装/配置的问题吗?解决方案定义的配置是否应该显示在该下拉列表中,或者您是否总是必须在第一次手动输入自定义配置名称?

4

3 回答 3

4

我设法通过从配置管理器中删除/重新创建我们所有的解决方案/项目配置自己解决了这个问题

显然,我们的解决方案配置出了点问题,导致尝试从构建定义中使用它们。我最好的猜测是,当它们被创建时,它们是从现有配置中复制/粘贴的,但是在这个过程中遗漏了一些东西,它们仍然以某种方式指向原始源配置。但是我不是最初创建它们的人,所以我不能确定到底出了什么问题。

无论如何,我为每个项目文件中的每个配置保存了 PropertyGroup XML 的备份,然后通过配置管理器从解决方案和每个项目中完全删除了每个配置。然后我重新创建了每个配置,并从我的备份中恢复了每个项目中的 PropertyGroups。现在我的构建定义正在从正确的 PropertyGroups 中读取构建属性,并在 Web.config 上执行正确的转换。

于 2013-08-15T14:32:28.640 回答
1

在您的构建 definMsDeployServiceUrltion 检查您正在构建的配置是否与完全相同的 cpu 匹配,即“AnyCPU”或“Any CPU”。注意额外的空间。在不同的 vs bersions 和 tfs 版本之间的某个地方出现或消失了一个神秘的空间。这让我以前很困惑。

作为测试,将 .csproj 文件中的 MsDeployServiceUrl 属性移出当前属性组节点。然后进行构建。如果它建立了,那么它将证明您的概念有效,但您仍然会遇到问题

于 2013-08-13T21:55:57.763 回答
0

从一个分支合并到另一个分支时,我遇到了这个问题。配置信息位于解决方案 (.sln) 文件中。打开该文件并查看配置信息是否正确。

看看下面的屏幕截图。我收到关于 PROD2|Any CPU 不正确的错误(在构建日志中),结果发现解决方案文件不是 PROD2|Any CPU,而是该行的 Release|Any CPU。一个小小的改变,一切都很好。

解决方案文件中的配置信息

于 2015-02-12T17:23:18.743 回答