小编Dom*_*mon的帖子

C# 9/10 顶级语句和 ExcludeFromCodeCoverage-Attribute?

我通常将该属性设置[ExcludeFromCodeCoverage]为我的 Program 类,因为无论如何都无法对该类进行单元测试(或者也没有意义),因此它不会在覆盖率报告中显示为“缺失”:

[ExcludeFromCodeCoverage]
public static class Program
{
    public static void Main(string[] args)
    {
       // do something awesome
    }
}
Run Code Online (Sandbox Code Playgroud)

但对于高层的声明,我不知道如何处理这个问题。正如我在这里发现的那样,似乎无法设置属性: https: //stackoverflow.com/a/69962982/1099519

到目前为止,我坚持经典的类声明,但也许他们在单元测试代码覆盖率方面考虑了其他事情?

c# code-coverage c#-9.0 toplevel-statement c#-10.0

12
推荐指数
1
解决办法
5499
查看次数

强制Chrome在CSS中使用外部字体

我花了很长时间才弄明白,Chrome总是喜欢本地安装的字体,而不是在css中链接的同名字体(另请参阅/sf/answers/1939307611/).我的问题是如何弄清楚,迫使Chrome不这样做.

在我的页面https://www.amon.cc/我使用来自Google字体的"Roboto Light"(https://fonts.google.com/specimen/Roboto),如下所示:

<link href="//fonts.googleapis.com/css?family=Roboto:300" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

在我的CSS文件中,字体声明如下:

body{
  ...
  font-family:Roboto,...;
  font-weight:300;
 ....
}
Run Code Online (Sandbox Code Playgroud)

在FF,IE,Edge中完美无缺:

FF,IE,Edge中的字体

但Chrome中的字体总是更厚:

Chrome中的字体,带有本地安装的字体

原因:在我的私人Windows 10和商业计算机上,Windows上预先安装了"Roboto"字体:Robot Regular,Robot Condensed.但是没有Roboto Thin或Robot Light,所以Chrome似乎对Roboto Regular有所回落.

从Windows中删除Robot字体集时,Chrome使用声明的Web字体并以我想要的方式显示它.我无法弄清楚,如何"强制"Chrome不使用本地安装,而是使用CDN上的.

但是,Chrome 可以https://fonts.google.com/specimen/Roboto网站上显示所有不同版本的Roboto字体(即使使用我本地安装的Robot字体).我无法找到如何做到这一点的技巧.

css fonts google-chrome google-webfonts

6
推荐指数
1
解决办法
2095
查看次数

Razor 类库 (RCL) 中包含静态内容的 404

我在 razor 类库 (.net Core 3.1) 中实现 ASP.NET Core (v3.1) 应用程序使用的静态文件时遇到困难。

当尝试访问静态文件时,我只收到 404 - 未找到。

我在 Stackoverflow 上遵循以下答案: https: //stackoverflow.com/a/57874357/1099519

我还交叉检查了文档:https://learn.microsoft.com/en-us/aspnet/core/razor-pages/ui-class ?view=aspnetcore-3.0&tabs=visual-studio#create-an -rcl-with-static-assets

我在库中的以下位置放置了一个 css 文件: wwwroot\css\Base.css并测试了以下路径:https://localhost:44300/_content/OurIt.Cockpit/css/Base.css,这会导致 404 未找到响应。

我已经检查过的内容:

  • 任何在 RCL 内具有视图的控制器都可以被浏览并且它们工作正常(渲染的 HTML 代码将提供给浏览器)
  • app.UseStaticFiles();网络应用程序中。
  • webBuilder.UseStaticWebAssets();网络应用程序中。
  • 正确的外壳。
  • Build Action设置wwwroot\css\Base.cssContent
  • RCL 项目定义了以下 sdk:<Project Sdk="Microsoft.NET.Sdk.Razor">
  • 在 RCL 项目中设置以下属性:

    <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <AddRazorSupportForMvc>true</AddRazorSupportForMvc> <PropertyGroup>

我还尝试了这个答案中描述的方式: https: //stackoverflow.com/a/59574845/1099519 ,我尝试从https://localhost:44300/path/css/Base.css访问该文件

是否有机会调试或定位问题?关于微软文档:

构建 RCL 时,会生成一个描述静态 Web …

asp.net-core-mvc .net-core asp.net-core razor-class-library

6
推荐指数
2
解决办法
7519
查看次数

从 Log4net 迁移到 .net Core 日志记录

我想将现有代码从 .NET 4.7.2/log4net 迁移到最新的 .NET Core 版本(目前是 2.2,九月份应该是 3.0)和“默认”日志记录。

我们有很多行代码来获取一个类的 log4net Logger 实例,MyClass 例如:

private static ILog _logger = LogManager.GetLogger(typeof(MyClass));
Run Code Online (Sandbox Code Playgroud)

并使用记录器 _logger.Info("Some message");

我发现的大多数示例和文档都在类构造函数中使用了依赖注入,例如:

public class AboutModel : PageModel
{
    private readonly ILogger _logger;

    public AboutModel(ILogger<AboutModel> logger)
    {
        _logger = logger;
    }
Run Code Online (Sandbox Code Playgroud)

并且记录器是这样使用的:

_logger.LogInformation("Message displayed: {Message}", Message);
Run Code Online (Sandbox Code Playgroud)

对我来说,迁移的最大问题是它由构造函数中的 DI 传递,这在 MVC 控制器的示例中可能没问题,但在我拥有的其他几个类中存在问题,因为破坏了构造函数。

我正在寻找一种不会破坏构造函数签名的实现(如 Xamarin 中的 DI,这将使迁移过程更容易) - 类似于:

private static ILogger _logger = DependencyService.Get<ILogger<MyClass>>();
Run Code Online (Sandbox Code Playgroud)

到目前为止我发现的是http://www.binaryintellect.net/articles/17ee0ba2-99bb-47f0-ab18-f4fc32f476f8.aspx上的一个例子,他们使用 HttpContext.RequestServices:

INotificationHelper helper = (INotificationHelper) HttpContext.RequestServices.GetService(typeof(INotificationHelper));
Run Code Online (Sandbox Code Playgroud)

我的代码也在控制台应用程序中运行,因此在这些情况下我没有 HttpContext。知道如何使用 .NET Core 解决这个问题吗?(最好没有任何 3rd …

c# migration log4net dependency-injection .net-core

4
推荐指数
1
解决办法
4501
查看次数