मेरे पास एक .net कोर कंसोल एप्लिकेशन है जो appsettings.json फ़ाइल से कनेक्शन स्ट्रिंग पढ़ रहा है। जब मैं विजुअल स्टूडियो से एप्लिकेशन चलाता हूं तो यह ठीक काम करता है। लेकिन जब मैं कार्य शेड्यूलर से इस कंसोल एप्लिकेशन को चलाता हूं तो यह ऐपसेटिंग.जेसन फ़ाइल से कनेक्शन स्ट्रिंग को पढ़ने में सक्षम नहीं है।

अपवाद:

अपवाद: System.ArgumentNullException: मान रिक्त नहीं हो सकता। पैरामीटर का नाम: कनेक्शनस्ट्रिंग at Microsoft.EntityFrameworkCore.Utilities.Check.NotEmpty (स्ट्रिंग मान, स्ट्रिंग पैरामीटरनाम) पर Microsoft.EntityFrameworkCore.SqlServerDbContextOptionsExtensions.UseSqlServer(DbContextOptionsBuilder विकल्पबिल्डर, स्ट्रिंग कनेक्शनस्ट्रिंग, एक्शन<कोड>1 sqlServerOptionsAction) पर GetValueFromDBCore.TestContext.OnConfiguring (DbContextOptionsBuilder) ऑप्शंसबिल्डर) in P:\Users\vivek.nuna\Redis\GetValueFromDBCore\GetValueFromDBCore\GetValueFromDBCoreContext.cs:line 25 बजे Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider() Microsoft.EntityFrameworkCore.DbContext.get_DbContextनिर्भरता पर () Microsoft.EntityFrameworkCore.DbContext.get_Model() पर Microsoft.EntityFrameworkCore.Internal.InternalDbSet1.get_EntityType() पर Microsoft.EntityFrameworkCore.Internal.InternalDbSet1.get_EntityQueryable() पर Microsoft.EntityFrameworkCore.Internal.InternalDbSet1.System.Linq.IQueryable.get_Provider() पर Microsoft.EntityFrameworkCore.RelationalQueryableExtensions.FromSqlRaw[TEntity](DbSet`1 स्रोत, स्ट्रिंग एसक्यूएल, ऑब्जेक्ट [] पैरामीटर) पर GetValueFromDBCore.Program.SetFreshDataInCache() in P:\Users\vivek.nuna\Redis\GetValueFromDBCore\GetValueFromDBCore\Program.cs:line 30 GetValueFromDBCore.Program.Main(String[] args) in . पर P:\Users\vivek.nuna\Redis\GetValueFromDBCore\GetValueFromDBCore\Program.cs:line 18

डीबीसीओअगली कक्षा:

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 बना दिया है और कार्य शेड्यूलर को exe पथ दिया है।

0
vivek nuna 17 पद 2019, 13:20

1 उत्तर

सबसे बढ़िया उत्तर

मैं इस मुद्दे को हल करने में सक्षम हूं, मैं कोड .SetBasePath(Directory.GetCurrentDirectory()) में Directory.GetCurrentDirectory() का उपयोग कर रहा था, इसलिए जब मैं वीएस से चलता हूं तो यह ठीक काम करता है। मैंने इसे Assembly.GetEntryAssembly().Location से बदल दिया और अब यह ठीक काम कर रहा है।

संदर्भ: https://stackoverflow.com/a/56409888/6527049

0
vivek nuna 17 पद 2019, 13:45