我有一个Asp.net core 6 Web Api应用程序。
我通过Visual Studio配置了Application Insights,添加了一个服务依赖项,如下所述。我还配置了本地AppSecrets文件来本地存储连接字符串。
现在我注意到在Program.cs中自动生成的代码接受一个变量作为参数:
builder.Services.AddApplicationInsightsTelemetry(builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]);
我想知道-这个参数真的需要吗?
当我阅读:
…自动调用services.AddApplicationInsightsTelemetry()从中读取连接字符串应用程序的配置。不需要显式地提供IConfiguration。
如果我在本地环境中删除它,它会正常工作,仍然会向App. Insights发送日志。
两个问题:
- 为什么自动生成的代码包含这个参数?
- 如果我删除参数-它会导致任何问题,当应用程序部署在测试或生产?
官方文档对所有这些都含糊不清,几句话会增加这么多的清晰度,所以让我试着帮助。
为什么自动生成的代码包含这个参数?
在VS2022中,当集成AppInsights SDK时,APPLICATIONINSIGHTS_CONNECTION_STRING
不再作为参数添加,这将是代码行:
builder.Services.AddApplicationInsightsTelemetry();
根据你链接的文档(这里),建议是正确的。如果使用了正确的命名法,Microsoft.Extensions.Configuration.IConfiguration
将自动读取连接字符串。例如,如果您已经在Azure中配置了AppInsights,那么您将在应用程序服务的Configuration
下看到以下值:
APPLICATIONINSIGHTS_CONNECTION_STRING
一旦部署到每个环境,该值将自动读取;不需要在主源代码本地向appsettings.json
添加额外的连接字符串信息。它将允许AppInsights在本地工作和部署,只要这些连接字符串存在于Azure中(在配置AppInsights时在Azure中自动为您创建,或者您可以通过ARM模板使用DevOps进行配置等)
这个GitHub链接很好地解释了它们如何在调用AddApplicationInsightsTelemetry()
如果我删除参数-它会导致任何问题,当应用程序部署在测试或生产环境中?
所以这是很酷的部分,这是模糊的-删除该参数不会导致它在部署时中断,和将适用于多个环境,因为读取的值将在每个不同的环境中使用相同的键名。因此,除非您显式地在您自己的源代码中的appsettings.json
中有一个值要覆盖,否则您可以严格地将Azure中的所有连接字符串值保留为1..n个环境,builder.Services.AddApplicationInsightsTelemetry();
一行将在appsettings中查找APPLICATIONINSIGHTS_CONNECTION_STRING
。