我希望我的应用程序能够记录到文件,所以我开始寻找比默认的 .NET Core 2.2 日志框架更多的东西。我看到 Serilog 可能会完成这项工作。但是,我找不到任何关于如何使用依赖注入在 .NET Core 控制台应用程序中设置 Serilog 的文档。我看到的只是 ASP.NET 材料,这可能不是我需要的。
我开始自己做。我安装了(Nuget):
我创建了一个扩展ServiceCollection
public static void AddLogging(this IServiceCollection services, Microsoft.Extensions.Logging.LogLevel logLevel)
{
var serilogLogger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("log.txt")
.CreateLogger();
services.AddLogging(builder =>
{
builder.SetMinimumLevel(logLevel);
builder.AddSerilog(logger: serilogLogger, dispose: true);
});
}
Run Code Online (Sandbox Code Playgroud)
但是,日志记录有效:
dispose应该true。通常,我希望 NET Core 的依赖注入框架来处理服务的处理。我正在关注https://docs.microsoft.com/en-us/azure/active-directory-b2c/tutorial-create-user-flows 上的教程。我创建了注册/登录用户流程,我只是尝试使用它。我选择了 Google 提供商,因为我已经定义了它。我输入我的国家和显示名称,因为我选择了这些参数是必需的。然后我被重定向到我的应用程序的重定向 URI,即https://jwt.ms。重定向是:
问题是,JWT.MS 没有解码它,我只是看到:
我尝试将我的令牌粘贴到框中,但没有任何反应。我也尝试使用具有相同令牌的 JWT.IO。我得到的信息:
无效签名
为什么 B2C 会向我返回无效的令牌?
我正在构建一个 API 客户端。我的 API 相当大,所以我决定将其分成大约 5 个(私有)子客户端,每个子客户端涵盖 API 的不同部分。5 个客户端使用起来不太舒服,所以我希望将它们置于 1 (public) 之下ApiClient,这将充当这 5 个客户端之上的一种外观。问题是我可能应该HttpClient在所有这些子客户端之间共享一个。据我所知,我可以做这样的事情:
services.AddHttpClient<SubClient1>(c => c.BaseAddress = new System.Uri("https://myapi.com"));
Run Code Online (Sandbox Code Playgroud)
通过上面的行,我的SubClient1将被注入到我的公共中ApiClient,并且HttpClient已经使用BaseAddress. 现在,我如何注册所有 5 个子客户端(SubClient1、SubClient2、SubClient3、 ...)以便他们每个人都收到相同的信息HttpClient?我认为下面的代码将创建 5 个HttpClient实例:
services.AddHttpClient<SubClient1>(c => c.BaseAddress = new System.Uri("https://myapi.com"));
services.AddHttpClient<SubClient2>(c => c.BaseAddress = new System.Uri("https://myapi.com"));
services.AddHttpClient<SubClient3>(c => c.BaseAddress = new System.Uri("https://myapi.com"));
services.AddHttpClient<SubClient4>(c => c.BaseAddress = new System.Uri("https://myapi.com"));
services.AddHttpClient<SubClient5>(c => c.BaseAddress = new System.Uri("https://myapi.com")); …Run Code Online (Sandbox Code Playgroud) 我安装了 docker(Docker for Mac)。我启动一个新容器
docker run -it ubuntu
Run Code Online (Sandbox Code Playgroud)
我可以看到我新创建的容器只需调用即可访问互联网
ping google.com
Run Code Online (Sandbox Code Playgroud)
我懂了:
root@b06e1a46cc40:/# ping google.com
PING google.com (216.58.209.14) 56(84) bytes of data.
64 bytes from sof01s12-in-f14.1e100.net (216.58.209.14): icmp_seq=1 ttl=37 time=63.0 ms
64 bytes from sof01s12-in-f14.1e100.net (216.58.209.14): icmp_seq=2 ttl=37 time=63.7 ms
64 bytes from sof01s12-in-f14.1e100.net (216.58.209.14): icmp_seq=3 ttl=37 time=64.8 ms
Run Code Online (Sandbox Code Playgroud)
接下来,我检查了容器连接到的网络:
root@b06e1a46cc40:/# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever …Run Code Online (Sandbox Code Playgroud) 我正在构建一个IHostedService实现。我的服务做了一些事情,这些事情应该在服务终止时处理,例如将一些事件处理程序注册到StartAsync().
现在我想知道,我应该在哪里真正注销这些处理程序?我自然会这样做Dispose()。然而,StopAsync()那是为了什么?
在控制台应用程序环境中,我认为它会像这样工作:
StopAsync()叫做Dispose()叫做我希望我的应用程序设计良好并涵盖其他可能的场景。例如,后台服务。我认为在这种情况下,有一个选择StopAsync(),然后StartAsync()没有Dispose()之间的选择。我对吗?
我应该处理这种情况吗?我的意思是,去登记StartAsync()我是否已经以某种方式注册了?
很难在带有控制台应用程序的 .NET Core 中找到有关通用主机的一些最佳实践。
我有 2 个 dockerfile:
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y \
software-properties-common \
python3
Run Code Online (Sandbox Code Playgroud)
FROM ubuntu:20.04
RUN apt-get update
RUN apt-get install -y software-properties-common
RUN apt-get update && apt-get install -y \
python3
Run Code Online (Sandbox Code Playgroud)
问题是:当我运行第一个(使用docker build)时,构建过程会挂起:
这software-properties-common包询问我有关地理区域的信息 - 我无法提供任何输入,我想在构建图像时不允许这样做。
但是,当我构建第二个dockerfile时,不会出现此问题。我很好奇——这是为什么?
我正在 Azure DevOps 上构建发布管道。我发布的一部分内容是将一堆文件复制到 Azure VM。据我了解,目标机器需要打开 PowerShell 5986 端口。
我有一个打开端口 5986 的虚拟机(我通过使用“目标机器上的 PowerShell”任务远程调用此虚拟机上的一些命令来验证这一点)。我添加了“Windows 机器文件复制”任务并填写了字段: - 源 - 机器 - 管理员登录 - 密码 - 目标文件夹
在“机器”字段中,我输入了目标机器的 IP。
由于运行该版本,我收到一个错误:
无法创建目标为“\\11.11.11.11\C$\TargetDirectory”的 PSDrive,错误消息:“找不到网络路径”找不到网络路径
我还尝试将 IP 地址与端口放在一起,格式如下:11.11.11.11:5986
然后,我收到了这个错误:
无法将值“\23.97.151.221:5986”转换为类型“System.Uri”。错误:“无效的 URI:无法解析主机名。”
文档 ( https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/windows-machine-file-copy?view=azure-devops ) 说允许带有端口的 IP 地址。
这里有什么问题?
powershell azure azure-devops azure-pipelines azure-pipelines-release-pipeline
我正在构建一个 Azure Function 项目,所以我不能以 .NET 5 为目标。相反,我的项目是一个netcoreapp3.1. 但是,当我的项目构建时,只要打印了一些信息,我就会看到提到了 dotnet 5。例子:
##[警告]/usr/share/dotnet/sdk/5.0.101/Microsoft.Common.CurrentVersion.targets(2123,5):警告 MSB3245:无法解析此引用。无法找到程序集“System.Text.Json,Version=4.0.1.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”。检查以确保程序集存在于磁盘上。如果您的代码需要此引用,您可能会收到编译错误。
(我在 System.Text.Json 中遇到的问题本身就是一个问题,在这篇文章中,我想了解 .NET 5 如何构建 netcoreapp3.1)。
我的系统上安装了 .NET Core 3.1,紧挨着 .NET 5。为什么构建系统不使用 3.1?我相信 .NET 5 与 3.1 相比有一些重大变化,所以我不确定使用 .NET 5 来构建项目是否可以。
同样的事情发生在 Azure DevOps Pipeline 构建和本地。在本地,在 Rider 中,我在构建时也看到了这一点:
控制台:使用构建工具:/usr/share/dotnet/sdk/5.0.102/MSBuild.dll
这是结果ll /usr/share/dotnet/sdk:
drwxr-xr-x 28 root root 12K sty 13 08:24 3.1.405/
drwxr-xr-x 28 root root 12K sty 13 08:24 5.0.102/
Run Code Online (Sandbox Code Playgroud)
如您所见,我有 3.1 和 5。
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#interacting-with-deployments-and-serviceskubectl logs deploy/my-deployment中显示的目的是什么?
我认为它会向我显示作为对象一部分部署的所有 Pod 的日志my-deployment。然而,即使我的部署中有 2 个 Pod,该命令也仅显示其中一个的日志。
我正在尝试在 Node 应用程序中使用开放遥测。我发现有些示例要求我安装@opentelemetry/sdk-node(例如这个官方指南),而另一些示例则要求我安装@opentelemetry/sdk-tracing-node(例如这个,也是官方指南),这有点令人困惑。
需要的示例@opentelemetry/sdk-node具有如下代码:
const sdk = new opentelemetry.NodeSDK({
traceExporter: new opentelemetry.tracing.ConsoleSpanExporter(),
instrumentations: [
// instrumentations...
]
});
sdk.start()
Run Code Online (Sandbox Code Playgroud)
使用的@opentelemetry/sdk-tracing-node都是这样的:
registerInstrumentations({
instrumentations: [
// instrumentations...
]
});
const provider = new NodeTracerProvider();
const exporter = new ConsoleSpanExporter();
const processor = new BatchSpanProcessor(exporter);
provider.addSpanProcessor(processor);
provider.register();
Run Code Online (Sandbox Code Playgroud)
他们有些相似,我猜他们最终会达到同样的目的。问题是:
c# ×4
.net ×3
.net-core ×3
docker ×2
azure ×1
azure-ad-b2c ×1
azure-devops ×1
azure-pipelines-release-pipeline ×1
dockerfile ×1
javascript ×1
jwt ×1
kubectl ×1
kubernetes ×1
logging ×1
networking ×1
node.js ×1
oauth-2.0 ×1
powershell ×1
serilog ×1