Вот ситуация: я создал проект 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.
Этопроблема окружающей среды? Или это, может быть, целевая проблема?
Спасибо за чтение.