我在使用SonarQube扫描仪进行MSBuild时遇到了一个奇怪的错误(扫描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”项目(找到here)。
很难说为什么运行MSBuild会尝试在该程序集下查找名为“UnityEngine.UI.Selectable”的类型(此类型存在,但在不同的程序集中)。
我正在扫描的.sln文件包含2个项目(一个引用另一个)。
我怎样才能知道这里发生了什么?以及这是扫描仪中的错误还是我使用该工具的方式?
答案 0 :(得分: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,目前正在等待修复。)