.NET ConfigurationErrorsException: нераспознанный раздел конфигурации <startup> - PullRequest
1 голос
/ 30 сентября 2019

Вот ситуация: я создал проект A с библиотекой пользовательского интерфейса под названием QmlNet. Я следовал инструкциям и т. Д. И т. Д. Проект работал отлично. (Возможности обсуждаемы)

Затем я создал проект B на основе проекта A, за исключением библиотеки пользовательского интерфейса, для интеграции другого (Eto.Forms)

  • Я переключилсяTargetPlatform, с netcoreapp2.2 до net461 (я пытался придерживаться netcoreapp2.2, и проблема не исчезла).
  • OutputType изменился с Exe на WinExe (я пыталсяпридерживаться Exe, но все еще есть проблема)
  • Восстановление должно быть сделано с помощью nuget (dotnet restore не восстанавливает packages.config) - здесь я не использую Visual Studio, поэтому не думаю, чтоЯ обеспокоен этим.
  • Строительство должно быть сделано с msbuild вместо dotnet build (dotnet build не поддерживает CodeTaskFactory)

Теперь безвключив новую библиотеку пользовательского интерфейса в код и просто запустив вот так, я получаю эту ошибку:

System.TypeInitializationException: The type initializer for 'System.Transactions.TransactionManager' threw an exception. ---> System.Configuration.ConfigurationErrorsException: Error Initializing the configuration system. ---> System.Configuration.ConfigurationErrorsException: Unrecognized configuration section <startup>

Файл, из которого получается ошибка, находится в ./bin/Debug/net461/myapp.app/Contents/MonoBundle/myapp.exe.config

Ипервые 5 строк файла:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
  <...>
</configuration>

Полная трассировка стека находится здесь: STACK_TRACE

Несколько лИнтересный код, здесь, в Program.cs

using System.Threading.Tasks;
using B129.Database;
using B129.Database.Seed;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Data.Sqlite;

namespace B129
{
    class Program
    {
        public static async Task Main(string[] args)
        {
            // Dependency injection.
            var serviceCollection = new ServiceCollection();

            var connectionStringBuilder = new SqliteConnectionStringBuilder { DataSource = "B129.db" };
            var connectionString = connectionStringBuilder.ToString();

            serviceCollection.ConfigureServices();
            serviceCollection.ConfigureDatabase(connectionString);

            var serviceProvider = serviceCollection.BuildServiceProvider();

            // Seed database. Do NOT dispose dbContext, that would destroy our only dbContext singleton instance.

            // it crashes just below :
            var dbContext = serviceProvider.GetRequiredService<B129DbContext>();
            await dbContext.EnsureSeedData();
        }
    }
}

ConfigureServices и ConfigureDatabase - это расширения, определенные здесь:

    internal static class Bootstrapper
    {
        internal static void ConfigureServices(this IServiceCollection serviceCollection)
        {
            serviceCollection.AddSingleton<IAccountRepository, AccountRepository>();
            serviceCollection.AddSingleton<IAccountService, AccountService>();
            serviceCollection.AddSingleton<AccountsController>();
        }

        internal static void ConfigureDatabase(this IServiceCollection serviceCollection, string connectionString)
        {
            serviceCollection.AddDbContext<B129DbContext>(options => options.UseSqlite(connectionString), ServiceLifetime.Singleton);
        }
    }

И DbContext прямо здесь:

using Microsoft.EntityFrameworkCore;
using B129.Database.Mapping;
using B129.Database.Models;

namespace B129.Database
{
    public class B129DbContext : DbContext
    {
        public B129DbContext(DbContextOptions<B129DbContext> options) : 
            base(options)
        {
            // If I comment this line, it does not crash.
            Database.EnsureCreated();
        }

        public DbSet<Account> Accounts { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            AccountMapping.Map(modelBuilder);

            base.OnModelCreating(modelBuilder);
        }
    }
}

Как сказано в комментарии, комментируя строку с EnsureCreated, не выдается никакой ошибки.

Трассировка стека очень очень странная, показывая пути, которых у меня нетмой компьютер (я на Mac) и сама ошибка довольно неоднозначна, поскольку startup является допустимым разделом конфигурации.

Я запускаю все это на VSCode.

Этопроблема окружающей среды? Или это, может быть, целевая проблема?

Спасибо за чтение.

1 Ответ

0 голосов
/ 02 октября 2019

Microsoft.EntityFrameworkCore не работает для целей net4xx. Он работает только на netstandard2.0

Я читал, что netstd должен быть частью net47, но при обновлении до net471 он компилируется, но все равно падает с некоторой (не) случайной ошибкой TypeTransaction.

РешениеЯ обнаружил, что должен был прекратить использовать Sqlite в своем проекте, так как я потратил на это целых 3 дня.

Удачи тем, кому придется столкнуться с этим.

...