我有一个 .NET 通用主机,IHostedService它从 OPC-UA 接口接收事件并处理它们。
问题是,如果在处理事件的过程中出现未处理的异常,整个应用程序就会崩溃
我阅读了文档,但没有找到关于全局异常处理程序或允许捕获未处理异常并防止应用程序崩溃的类似机制的任何信息。
是否有保护通用主机以及IHostedService防止未处理异常的解决方案?
编辑
我知道,这里最简单的事情是尝试/捕获异常而不是让它冒泡。但是我想知道是否有类似 WinForms / WPF 的机制,您可以在其中更全局地捕获此类异常并防止崩溃。
编辑
这是代码的简化版本:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
return new HostBuilder()
.UseEnvironment(environmentName)
.ConfigureLogging((hostContext, logging) =>
{
...
})
.ConfigureAppConfiguration((hostContext, builder) =>
{
builder
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", true, true)
.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", true, true)
.AddEnvironmentVariables();
})
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton<IHostedService, OpcClientHostedService>();
...
});
}
}
public class OpcClientHostedService : …Run Code Online (Sandbox Code Playgroud) 在 asp.net 核心项目中,我需要一个加密的 SQLite 数据库。为此,我制作了自己的方法SqliteEncryptedConnection,它继承自Microsoft.Data.Sqlite.SqliteConnection并在Open()方法中设置加密密钥(执行 PRAGMA key = ...)
我有一个扩展方法,它通过创建一个连接并提供它来配置我的 EF 上下文。
public static void UseEncryptedSqlite(this DbContextOptionsBuilder optionsBuilder, string connectionString, string password)
{
var connection = new SqliteEncryptedConnection(connectionString, password);
connection.Open();
optionsBuilder.UseSqlite(connection);
}
Run Code Online (Sandbox Code Playgroud)
我必须先打开连接,然后才能将其提供给 EF,否则 EF 会为每个单个查询自动打开和关闭连接,并且该Open()方法现在非常昂贵。
我对这个解决方案的问题是我的连接永远不会被处理或关闭!
肮脏的解决方案是在 EF 上下文的 Dispose 方法中处理连接,但我真的不想处理注入而不属于上下文的依赖项。
是否有可能在没有互联网接入的visual studio 2015上安装typescript 1.5?由于VS2015"开箱即用",似乎没有安装程序(除了1.5测试版)
但是,如果您没有Internet访问权限,则VS安装会以警告结束,因为它无法下载打字稿工具.最后,扩展名列表中没有打字稿工具