【发布时间】:2020-04-07 06:36:55
【问题描述】:
我们有一个小的 Asp.Net Core 应用程序,其中包含一些 cshtml 文件。构建它会运行 C# 编译器两次:
- 曾经是为应用程序本身生成程序集,例如JavascriptClient.dll
- 另一次是生成 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.txt 和 c:\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