【问题标题】:Why using Sonar Scanner prevents C# compiler from creating Razor Views assembly?为什么使用 Sonar Scanner 会阻止 C# 编译器创建 Razor Views 程序集?
【发布时间】:2020-04-07 06:36:55
【问题描述】:

我们有一个小的 Asp.Net Core 应用程序,其中包含一些 cshtml 文件。构建它会运行 C# 编译器两次:

  1. 曾经是为应用程序本身生成程序集,例如JavascriptClient.dll
  2. 另一次是生成 Razor Views 程序集,例如JavascriptClient.Views.dll

当我们激活声纳扫描器时发生了奇怪的事情 - 不再生成 JavascriptClient.Views.dll 并且没有输出声纳警告!

我追踪到了 C# 编译器的/errorlog 命令行开关。以下简短的注释记录抓住了这个问题:

C:\\src\JavascriptClient\JavascriptClient> Test-Path .\obj\Debug\netcoreapp2.2\JavascriptClient.Views.dll
False

所以 Views 程序集最初并不存在。

C:\\src\JavascriptClient\JavascriptClient> fc.exe C:\temp\1.txt c:\temp\2.txt
Comparing files C:\TEMP\1.txt and C:\TEMP\2.TXT
***** C:\TEMP\1.txt
/out:obj\Debug\netcoreapp2.2\JavascriptClient.Views.dll
/errorlog:C:\\src\JavascriptClient\JavascriptClient\bin\Debug\netcoreapp2.2\JavascriptClient.Views.dll.RoslynCA
.json
/target:library
***** C:\TEMP\2.TXT
/out:obj\Debug\netcoreapp2.2\JavascriptClient.Views.dll
/target:library
*****

两个文件 c:\temp\1.txtc:\temp\2.txt 是相同的,除了单行不同 - 前者指定/errorlog 开关。

C:\\src\JavascriptClient\JavascriptClient> dotnet "C:\Program Files\dotnet\sdk\2.2.110\Roslyn\bincore\csc.dll" '@c:\temp\1.txt'
Microsoft (R) Visual C# Compiler version 2.10.0.0 (45b37117)
Copyright (C) Microsoft Corporation. All rights reserved.

C:\\src\JavascriptClient\JavascriptClient> Test-Path .\obj\Debug\netcoreapp2.2\JavascriptClient.Views.dll
False

使用 c:\temp\1.txt 中的参数运行 C# 编译器成功,但未生成 Views 程序集!

C:\\src\JavascriptClient\JavascriptClient> dotnet "C:\Program Files\dotnet\sdk\2.2.110\Roslyn\bincore\csc.dll" '@c:\temp\2.txt'
Microsoft (R) Visual C# Compiler version 2.10.0.0 (45b37117)
Copyright (C) Microsoft Corporation. All rights reserved.

C:\\src\JavascriptClient\JavascriptClient> Test-Path .\obj\Debug\netcoreapp2.2\JavascriptClient.Views.dll

True

在没有/errorlog 开关的情况下运行相同的命令行生成视图程序集!

请在下面找到 c:\temp\1.txt:

的缩略版
/unsafe-
/checked-
/nowarn:NU5105,1701,1702,1701,1702
/nostdlib+
/errorreport:prompt
/warn:4
/define:TRACE;DEBUG;NETCOREAPP;NETCOREAPP2_2
/reference:...
...
/reference:...
/debug+
/debug:full
/filealign:512
/optimize-
/out:obj\Debug\netcoreapp2.2\JavascriptClient.Views.dll
/errorlog:C:\src\JavascriptClient\JavascriptClient\bin\Debug\netcoreapp2.2\JavascriptClient.Views.dll.RoslynCA.json
/target:library
/warnaserror+
/utf8output
/deterministic+
/analyzer:"C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.mvc.analyzers\2.2.0\analyzers\dotnet\cs\Microsoft.AspNetCore.Mvc.Analyzers.dll"
/analyzer:C:\Users\me\.nuget\packages\microsoft.codeanalysis.analyzers\1.1.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll
/analyzer:C:\Users\me\.nuget\packages\microsoft.codeanalysis.analyzers\1.1.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll
/analyzer:"C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.entityframeworkcore.analyzers\2.2.0\analyzers\dotnet\cs\Microsoft.EntityFrameworkCore.Analyzers.dll"
obj\Debug\netcoreapp2.2\Razor\Pages\Error.g.cshtml.cs obj\Debug\netcoreapp2.2\Razor\Pages\Index.g.cshtml.cs ...
/warnaserror+:NU1605

注意,我已经从参数中删除了所有声纳分析器!

/errorlog 参数的文档在这里 - https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/listed-alphabetically 那里真的什么都没有。

所以,我在这里迷路了。我该如何解决这个难题?我的意思是我想要 Sonar 和 Views 程序集。

【问题讨论】:

  • 为什么这个 SonarQube 相关?您证明自己它与 /errorlog 选项有关。也许this 文档页面可以帮助你。
  • SonarQube 是它的开始。我有这个标志的唯一原因是因为 SonarQube。我提到它是因为它是触发器之一。我不相信很多人将此标志传递给编译器,但许多人使用 Sonar Scanner 并因此可以了解这一点并提供帮助。
  • 我看不出这个链接有什么帮助。如果你这样做 - 请详细说明。

标签: c# asp.net-core sonarqube


【解决方案1】:

在将/errorlog 开关传递给 MSBuild 时,csc 编译器中的 a bug 会阻止在某些情况下生成输出程序集。这可以在使用 SonarScanner for MSBuild 时显示,因为它设置了此构建属性。请参阅this post 了解更多信息。

尝试升级到较新版本的构建工具(v16.1 或更高版本)。

【讨论】:

  • 我们正在使用C:\Program Files\dotnet\sdk\2.2.110\Roslyn\bincore\csc.dll。您的意思是我们应该使用高于 2.2.110 的 .net 内核吗?您能建议使用哪个版本吗?
  • 是的,使用较新的版本构建(您的应用仍然可以针对较早的框架版本)。看起来 .NET SDK 3.0.100 随 MSBuild v16.3 一起提供,这样就可以了。
  • 我需要检查一下,但我现在会接受你的回答。希望它确实可以解决它。
猜你喜欢
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
相关资源
最近更新 更多