C# 现在,当从windows任务调度器运行.net核心控制台应用程序时,可以读取appsettings.json文件中的连接字符串
我有一个.net核心控制台应用程序,它正在从appsettings.json文件读取连接字符串。当我从VisualStudio运行应用程序时,它工作正常。但是当我从任务调度器运行这个控制台应用程序时,它无法从appsettings.json文件中读取连接字符串 异常: 异常:System.ArgumentNullException:值不能为null。 参数名称:连接字符串位于 Microsoft.EntityFrameworkCore.Utilities.Check.NotEmpty(字符串值, 字符串参数(名称)位于 Microsoft.EntityFrameworkCore.SqlServerDbContextOptionsExtensions.UseSqlServer(DbContextOptionsBuilder 选项生成器,字符串连接字符串,操作C# 现在,当从windows任务调度器运行.net核心控制台应用程序时,可以读取appsettings.json文件中的连接字符串,c#,.net-core,C#,.net Core,我有一个.net核心控制台应用程序,它正在从appsettings.json文件读取连接字符串。当我从VisualStudio运行应用程序时,它工作正常。但是当我从任务调度器运行这个控制台应用程序时,它无法从appsettings.json文件中读取连接字符串 异常: 异常:System.ArgumentNullException:值不能为null。 参数名称:连接字符串位于 Microsoft.EntityFrameworkCore.Utilities.Check.NotEmpty(字符串值,
1
SQLServerOptions(操作)位于
GetValueFromDBCore.TestContext.OnConfigurang(DbContextOptionsBuilder
选项生成器)中
P:\Users\vivek.nuna\Redis\GetValueFromDBCore\GetValueFromDBCore\GetValueFromDBCoreContext.cs:line
25分
Microsoft.EntityFrameworkCore.DbContext.get\u InternalServiceProvider()
在Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies()中
在Microsoft.EntityFrameworkCore.DbContext.get_Model()中
Microsoft.EntityFrameworkCore.Internal.InternalDbSet
1.get\u EntityType()
在
Microsoft.EntityFrameworkCore.Internal.InternalDbSet1.get_EntityQueryable()
在
Microsoft.EntityFrameworkCore.Internal.InternalDbSet
1.System.Linq.IQueryable.get\u Provider()
在
Microsoft.EntityFrameworkCore.RelationalQueryableExtensions.FromSqlRaw[TEntity](DbSet`1)
源、字符串sql、对象[]参数)位于
中的GetValueFromDBCore.Program.SetFreshDataInCache()
P:\Users\vivek.nuna\Redis\GetValueFromDBCore\GetValueFromDBCore\Program.cs:line
中的GetValueFromDBCore.Program.Main(字符串[]args)处的30
P:\Users\vivek.nuna\Redis\GetValueFromDBCore\GetValueFromDBCore\Program.cs:line
十八
DBCOnext类:
class TestContext: DbContext
{
public DbSet<EmployeeEntity> EmployeeEntity { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
IConfigurationRoot configuration = builder.Build();
optionsBuilder.UseSqlServer(configuration.GetConnectionString("db_core_ef_first"));
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="StackExchange.Redis" Version="2.0.601" />
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
类TestContext:DbContext
{
公共DbSet EmployeeEntity{get;set;}
配置时受保护的覆盖无效(DBContextOptions Builder Options Builder)
{
var builder=new ConfigurationBuilder()
.SetBasePath(目录.GetCurrentDirectory())
.AddJsonFile(“appsettings.json”,可选:true,reloadOnChange:true);
IConfigurationRoot配置=builder.Build();
optionsBuilder.UseSqlServer(configuration.GetConnectionString(“db_core_ef_first”);
}
}
CS项目文件:
class TestContext: DbContext
{
public DbSet<EmployeeEntity> EmployeeEntity { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
IConfigurationRoot configuration = builder.Build();
optionsBuilder.UseSqlServer(configuration.GetConnectionString("db_core_ef_first"));
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="StackExchange.Redis" Version="2.0.601" />
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
Exe
netcoreapp2.1
总是
注意我发布了控制台应用程序exe,并为任务计划程序提供了exe路径。我能够解决这个问题,我在code
中使用了目录.GetCurrentDirectory()
.SetBasePath(Directory.GetCurrentDirectory())
所以当我从VS运行时,它工作正常。我用Assembly.GetEntryAssembly().Location替换了它,现在它工作正常
参考: