1

我在使用用于 MSBuild 的 SonarQube 扫描仪时遇到了一个奇怪的错误(扫描 C# 代码)。

在我的项目上运行该工具时,我收到此错误:

"D:\Repro\Buggy.sln" (Rebuild target) (1) ->
"D:\Repro\Buggy.Editor.csproj" (Rebuild target) (3) ->
(RunCodeAnalysis target) ->
  MSBUILD : error : CA0001 : Could not find type 'UnityEngine.UI.Selectable' in assembly 'UnityEditor.UI, Version=1.0.0.0, Culture=neutral'. [D:\Repro\Buggy.Editor.csproj]

    2 Warning(s)
    1 Error(s)

请注意,我能够创建一个演示此错误的最小“repro”项目(在此处找到)。

很难说为什么运行 MSBuild 会尝试在该程序集下查找名为“UnityEngine.UI.Selectable”的类型(此类型存在,但在不同的程序集中)。

我正在扫描的 .sln 文件包含 2 个项目(一个引用另一个)。

我怎样才能知道这里发生了什么?以及这是扫描仪中的错误还是我如何使用该工具?

4

1 回答 1

1

我终于能够找到导致此问题的原因。

使用最新的 C# 插件版本(5.5.1.522)运行,分析仍然失败并出现同样的错误。

我还尝试从 VS2015 运行分析 - 失败并显示相同的错误消息。

更深入地挖掘 - 有问题的程序集 UnityEditor.UI.dll 最初引用了所需的 UnityEngine.UI.dll,但以某种方式被处理以剥离该程序集引用。

这就是失败的原因。执行分析时,使用“篡改”或修改的 DLL。

查看我刚刚创建的此线程的更多信息:https ://forum.unity3d.com/threads/unityeditor-ui-dll-is-tampered-with-before-copying-to-library-unityassemblies.446053/

我将 DLL 恢复为原始版本,一切正常。所以,不是 SonarQube 错误,但仍然很烦人(而且很奇怪!)

我相信这些程序集的处理是由 VSTU(Visual Studio Tools for Unity)完成的,我还联系了该项目的开发人员之一 - Jb Evain,目前正在等待修复)。

于 2017-03-30T15:28:12.080 回答