编译构建 CODEARTS BUILD-使用Msbuild构建:Msbuild系统规格说明

时间:2024-05-30 11:27:04

Msbuild系统规格说明

为方便使用,编译构建服务提供的Msbuild构建环境原则上尽可能保持与本地环境一致,但因Windows系统与编译构建服务本身一些系统限制,少数场景下可能会导致构建失败。

使用前建议仔细阅读以下规格说明。

  • 不支持带空格的文件路径

    C#项目中目录或文件名中包含空格会导致构建失败,目录/文件的命名请使用字母、数字、下划线的组合,勿使用其他特殊字符,避免不必要的构建失败。

  • 文件全路径长度不得超过260个字符
    • Windows系统中,文件全路径的最大长度限制为260个字符,超过此长度会导致Msbuild构建失败。
    • 编译构建服务约定在指定目录下执行命令,即您的构建场景实际与以下步骤类似:
      cd C:\编译构建的默认路径\您的项目路径
      msbuild
      • 项目文件全路径长度实际为项目下文件相对路径长度与编译构建服务默认路径长度之和。
      • 编译构建服务默认路径长度为45字符。

        因此,在使用Msbuild构建的过程中,您的项目文件路径需满足:项目下文件相对路径(以代码仓库为根目录)长度不可大于215字符。

      • 一些特殊场景(如构建时指定输出目录为“Output/release”)下,可能会额外占用路径长度。

        建议您的项目下文件相对路径(以代码仓库为根目录)长度保持在200个字符以下,原则上尽可能短。

  • 不可直接引用系统不具备的组件
    • 部分场景下,解决方案中可能不使用NuGet等管理工具,直接引用默认路径下的程序集。

      但构建时环境中不具备此程序集,导致编译告警,如果项目代码中使用了此引用,甚至会直接导致失败。

    • 由于Windows系统特殊性,通常情况下,此类程序集默认安装于本地系统,无需指定程序集位置,VS构建时会从默认配置的几个程序集路径查找,可以构建成功。

      而云端构建环境对应目录无此程序集,进而导致云端构建环境与本地不一致带来的失败。

    • 为解决此类场景,Msbuild集成了NuGet,可以在构建时从远程仓库下载对应程序集,此时只需于项目中指定“packages.config”,并于其中声明依赖的程序集即可。
    • 特殊情况下,项目引用的程序集可能无法在远程仓库找到,此时需要手工保存程序集至代码仓库中,并显式指定程序集路径。

      详细解决方案请参见找不到程序集(**.dll)

  • 命令行中路径分隔符使用'/'而非'\'

    部分场景下,可能需要在命令行中使用路径参数,此处需注意,Msbuild构建环境要求路径分隔符统一使用“/”格式。

    错误示例:

    cd test\test1或cd test\\test1

    正确示例:

    cd test/test1
  • 避免直接指定低版本SDK路径
    • 编译构建服务提供了“.NET Framework”的4.7.2版本和3.5版本(详细说明请参见已支持的镜像版本及工具集)。

      一般来讲,4.7.2版本可以兼容4.0以上版本SDK,3.5版本可以兼容3.5版本以下SDK,项目中可以引用兼容版本的SDK内容。

    • 在某些场景下,用户可能将引用直接指向了某个低版本的sdk路径,此时会因找不到SDK导致构建失败。

      如果您的项目出现此类场景,建议:

      • 尝试更改您的引用路径,尽可能使用兼容版本SDK。
      • 如果您的项目因为不可回避的原因,必须指向低版本SDK路径,请尝试联系客服。
support.huaweicloud.com/usermanual-codeci/codeci_ug_0021.html