【发布时间】:2022-01-05 06:14:36
【问题描述】:
背景
我的总体目标是让 Sonarqube 在 CI 中为 Unity 项目运行。 据我了解,要让声纳扫描仪工作,我必须在统一之外编译我想用 msbuild 分析的项目。 我构建了一个基于 ubuntu 的 docker 镜像,其中包含 Unity、monodevel 和 sonarscanner。 ci 运行一个包含以下行的 shell 脚本:
mono /opt/sonar-scanner-msbuild/SonarScanner.MSBuild.exe begin \ #...more arguments
msbuild Assembly-CSharp-Editor.csproj
mono /opt/sonar-scanner-msbuild/SonarScanner.MSBuild.exe end -d:sonar.login="$SONAR_TOKEN"
虽然解决方案在 Unity 中完美编译,但 msbuild 步骤失败并出现 cs0246 和 cs0234 等编译器错误。看一眼这些错误,它们似乎都源自跨程序集的引用。
小例子:
我在 Unity 中创建了 2 个程序集 A 和 B。
A 不依赖于任何东西,B 只依赖于 A。 Unity 创建 .csproj 文件 A.csproj 和 B.csproj。
两个程序集都包含一个静态类:
public static class A {
public static void TestA() => Console.WriteLine("Testing A");
}
public static class B {
public static void TestB() => A.TestA();
}
当我跑步时
msbuild B.csproj
很明显,依赖项被拾取,因为在日志的开头附近有
项目“/builds/root/logoleon-app/B.csproj”(1)正在建设中 节点 1 上的“/builds/root/logoleon-app/A.csproj”(2:2)(默认 目标)。
成功构建A 程序集后
完成构建项目“/builds/root/logoleon-app/A.csproj”(默认 目标)。
它移动到B,但失败了
Assets/test/B/B.cs(3,9):错误 CS0103:名称“A”不存在于 当前上下文 [/builds/root/logoleon-app/B.csproj]
以msbuild B.csproj 命令开头的日志文件的完整结尾:https://pastebin.com/mdBdPTrJ,包括A.csproj 和B.csproj 的内容
可能是什么问题?
【问题讨论】: