.testsettings 部署部分在 TFS 构建中被忽略

.testsettings deployment section gets ignored in TFS build

我有一个包含大量 C# 项目和大量测试的解决方案。其中一些测试需要很少的本机 dll(由相关的 nuget 包提供)。为了解决这个 .testsettings 文件,它在 运行 测试之前将 dll(nuget 复制到 $(OutDir))复制到测试目录。

所有这些在本地机器上运行良好,但在 TFS Build 下执行时,.testsettings 文件的 'deployment' 部分(或可能是整个文件)被忽略——这些 dll 永远不会在测试目录中实现(也没有日志中有关它们的任何条目)。 .testsettings 文件在 TFS 构建配置的相关部分中提到。

有什么想法是错误的吗? (MSVC 2015,TFS 2013)

您是否尝试查看它们是否安装在您的 TFS 服务器上? 您是否检查了 TFS 服务器的 GAC 是否已注册?

下面是我如何处理依赖关系的解释,希望对您有所帮助。

这是我关于这个话题的 HMO。我必须避免让 TFS 负责在单独的文件夹中恢复 NuGet 包。 我该怎么做?

1- 我在项目级别创建了一个单独的文件夹。 (常见)

如果您看到底部有一个 Nuget.config 文件。下面是它的配置

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="$\..\Common\Packages" />
  </config>
</configuration>

现在我所有的包都托管在 Common 文件夹中。现在,如果需要,将所有额外的 dll 放在一个单独的文件夹中。如果您依赖于托管在 GAC 上的本机 dll,那么您应该查看 TFS 服务器(如果它们安装在那里)。 话虽如此,我将所有项目引用都指向了我的 Common 文件夹,甚至我的 Nuget 存储库也从该位置获取文件。

优势:

  1. 您集中所有的 dll(请记住,如果您依赖本机 dll,您应该在 TFS 上安装您需要的框架版本,以便 运行 MSBuild 正确)
  2. 所有项目都指向相同的依赖关系
  3. 你只需维护 Common 文件夹即可。
  4. 一旦您在 Common 文件夹中签入一个包,您就可以保证依赖项也托管在 TFS 上,并且当 MSBuild 运行s 时它可以找到它们。

对于 TFS 2013,它只有 XAML 构建。对于 XAML 构建,测试设置文件无法在测试 运行 之前将程序集从 Nuget 包 $(OutDir) 复制到 C:\Builds\...\builddefinition\...\TestSetting(tst)\...\Out 文件夹。

建议您将TFS升级到TFS 2015以上版本使用VNext build。我已经在 Vnext 构建中测试过它,它可以工作。这是我的构建定义示例:只需添加 3 个步骤。