具有 Entity Framework 核心的 .NET 控制台应用程序:'The process has no package identity' 仅在未调试的情况下启动
.NET Console App with Entity Framework Core: 'The process has no package identity' only when started without debugging
我有一个 .NET 控制台应用程序与 Entity Framework 和 Discord Sharp Plus 集成,具有以下库:
- DSharpPlus
- DSharpPlus.CommandsNext
- Microsoft.EntityFrameworkCore.Design
- Microsoft.EntityFrameworkCore.Sqlite
- Microsoft.EntityFrameworkCore.Tools
运行 未经调试的应用程序(Visual Studio 中的 Control + F5)工作正常,没有发生崩溃。
但是,如果我 运行 进行调试,在访问我的 DbContext
时,我得到一个错误
InvalidOperationException: The Process has no package identity (0x80073D54)
例如这行:
Database.Commands.SingleOrDefault(x => x.CommandTrigger == name)
出于调试目的,如果我将 SingleOrDefault
更改为 ElementAt(0)
,我会收到以下错误:
System.InvalidOperationException
HResult=0x80131509
Message=Processing of the LINQ expression 'DbSet .ElementAtOrDefault(__p_0)' by 'NavigationExpandingExpressionVisitor' failed. This may indicate either a bug or a limitation in EF Core. See https://go.microsoft.com/fwlink/?linkid=2101433 for more detailed information.
Source=Microsoft.EntityFrameworkCore
StackTrace:
at Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
这不是 UWP 应用程序。它是一个带有多个 class 库的 .NET 控制台应用程序。
这是我的 Dbcontext class:
private readonly string dbPath = $"Data Source={Environment.GetEnvironmentVariable("YuutaDbPath")}";
public DbSet<Guild> Guilds { get; set; }
// ...
// ...
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite(dbPath);
protected override void OnModelCreating(ModelBuilder builder)
{
builder.SeedEnumValues//....
}
我read知道当连接字符串上没有使用完全限定路径时会发生此异常。确保连接中的数据库路径完全符合以下形式:
var dbPath = @"Filename=C:\the\path\to\your\database.db";
您可以决定这个完整字符串是在环境变量中还是只将路径作为环境变量。
这可能是由 EF Core 处理的内部异常。如果您在 Visual Studio 中禁用了“Enable Just My Code”,您将看到此类异常:工具 -> 选项 -> 调试
启用此选项应该可以解决问题。
本质上,当异常发生在代码之外时,即使已处理,这也会中断代码执行。
如果您在异常发生时按 F5,它应该继续 运行 - 这就是您的程序 运行 在没有附加调试器时没有问题的方式。
我有一个 .NET 控制台应用程序与 Entity Framework 和 Discord Sharp Plus 集成,具有以下库:
- DSharpPlus
- DSharpPlus.CommandsNext
- Microsoft.EntityFrameworkCore.Design
- Microsoft.EntityFrameworkCore.Sqlite
- Microsoft.EntityFrameworkCore.Tools
运行 未经调试的应用程序(Visual Studio 中的 Control + F5)工作正常,没有发生崩溃。
但是,如果我 运行 进行调试,在访问我的 DbContext
时,我得到一个错误
InvalidOperationException: The Process has no package identity (0x80073D54)
例如这行:
Database.Commands.SingleOrDefault(x => x.CommandTrigger == name)
出于调试目的,如果我将 SingleOrDefault
更改为 ElementAt(0)
,我会收到以下错误:
System.InvalidOperationException
HResult=0x80131509
Message=Processing of the LINQ expression 'DbSet .ElementAtOrDefault(__p_0)' by 'NavigationExpandingExpressionVisitor' failed. This may indicate either a bug or a limitation in EF Core. See https://go.microsoft.com/fwlink/?linkid=2101433 for more detailed information.
Source=Microsoft.EntityFrameworkCoreStackTrace:
at Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
这不是 UWP 应用程序。它是一个带有多个 class 库的 .NET 控制台应用程序。
这是我的 Dbcontext class:
private readonly string dbPath = $"Data Source={Environment.GetEnvironmentVariable("YuutaDbPath")}";
public DbSet<Guild> Guilds { get; set; }
// ...
// ...
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite(dbPath);
protected override void OnModelCreating(ModelBuilder builder)
{
builder.SeedEnumValues//....
}
我read知道当连接字符串上没有使用完全限定路径时会发生此异常。确保连接中的数据库路径完全符合以下形式:
var dbPath = @"Filename=C:\the\path\to\your\database.db";
您可以决定这个完整字符串是在环境变量中还是只将路径作为环境变量。
这可能是由 EF Core 处理的内部异常。如果您在 Visual Studio 中禁用了“Enable Just My Code”,您将看到此类异常:工具 -> 选项 -> 调试
本质上,当异常发生在代码之外时,即使已处理,这也会中断代码执行。
如果您在异常发生时按 F5,它应该继续 运行 - 这就是您的程序 运行 在没有附加调试器时没有问题的方式。