3

我有一个包含以下项目的 Azure 云服务的 Visual Studio 解决方案:

  • 云服务
  • 云服务角色
  • 测试

Tests项目是一个标准的 MSTest 项目,其中包含项目中业务逻辑的单元测试CloudServiceRole

代码存储在 Visual Studio Online 中,我已经连接了 Azure 提供的自动化 CI 构建部署。当我签入代码时,我的云服务的暂存部署会自动更新。但是,在 CI 构建期间甚至从未构建过 Tests 项目!当然,这意味着在构建过程中不会运行任何单元测试,因为构建过程的“运行单元测试”部分找不到带有测试的程序集。

我的目标是改变这一点,以便构建测试项目并执行所有单元测试。

查看 CI 部署过程使用的 MSBuild 参数,似乎只CloudService:Publish执行了目标。该CloudService项目不依赖于该Tests项目,因此 MSBuild 甚至从不构建后者。

我试过的

我无法手动添加CloudService->Tests依赖项,因为当我在不是云服务角色项目的项目上添加依赖项时,我在构建 ( The item "C:\a\src\MyProject\Tests\Tests.csproj" in item list "ProjectReferenceWithConfiguration" does not define a value for metadata "Name".) 期间收到错误,并且我无法添加CloudServiceRole->Tests依赖项,因为这会产生循环依赖。

指示 MSBuild 通过手动添加参数来构建完整的解决方案/t:Build导致另一个错误:C:\a\bin\ServiceDefinition.csdef: Need to specify the physical directory for the virtual path 'Web/' of role Web.

Tests项目添加为单独的构建目标以及解决方案,会导致构建测试!但是,与此同时,它会禁用持续部署功能:More than one solution found. Continuous Deployment skipped.

尝试创建一个引用该Tests项目但配置了零实例的虚假云服务角色项目会导致构建错误:WAT100: The following roles 'Tests.FakeRole' have an instance count of 0. Instance count of 0 is not supported in deployments to Microsoft Azure. 由于 Azure SDK 中的缺陷,尝试禁用此验证会导致生成错误

4

2 回答 2

1

您需要分别运行 aBuild和 a Publish。我在我的 VSO(现在是 VSTS)项目中遇到了同样的问题,这解决了它。发生这种情况是因为您的云服务不依赖于您的单元测试项目。

1) 带参数的 Visual Studio Build(或 MSBuild)操作/t:Build(此处为 clean)

2) 带参数的 Visual Studio Build(或 MSBuild)操作/t:Publish(此处不要清理)

注意:我必须单独运行这些操作(不是/Build;Publish),否则我会收到有关云服务入口点的错误。

从这个问题以及从这里这里拼凑起来。

于 2016-04-22T18:24:45.213 回答
0

似乎带来结果的一种解决方法是将预 MSBuild 脚本添加到构建定义中,并在该脚本中显式构建测试项目。

:: This is used as a pre-build script in Continuous Deployment builds because on their own, they do not build the Tests project.
"c:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" %~dp0\..\..\Tests\Tests.csproj /t:Build /p:Configuration=Debug;Platform=AnyCPU;OutDir="%~dp0\..\..\..\..\bin\\"

它似乎可以完成这项工作,尽管我不确定我应该注意哪些副作用。我主要担心的是来自此构建的二进制文件与来自云服务构建的二进制文件进入同一目录 - 这里可能存在冲突的可能性吗?

于 2014-09-02T11:28:37.147 回答