Получение 'System.TypeInitializationException' при запуске проекта в Docker - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть задание, где я должен поместить свой проект CSOM .NET CORE 2.2 в докер.

Проект состоит из консольного приложения, которое вызывает проект CSOM (dll) и обновляет поля таксономии.

Когда я запускаю проект самостоятельно, он отлично работает.

КогдаЯ помещаю проект в контейнер Docker и пытаюсь запустить его. Я получаю следующее

System.AggregateException: произошла одна или несколько ошибок.(Инициализатор типа для «Microsoft.Win32.Registry» вызвал исключение.) ---> System.TypeInitializationException: Инициализатор типа для «Microsoft.Win32.Registry» вызвал исключение.---> System.PlatformNotSupportedException: реестр не поддерживается на этой платформе.

Вот мой файл Docker

FROM microsoft/aspnetcore-build:2.0
FROM microsoft/dotnet:2.2-aspnetcore-runtime
FROM microsoft/dotnet:2.2-sdk

WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# copy and build everything else
COPY . ./
#RUN dotnet publish -c Release -o out
ENTRYPOINT ["dotnet", "out/WebJobCore.dll"]

Вот часть кода в консольном приложении

    public static void Main(string[] args)
    {

        Console.WriteLine("Testing webjob");

        Program t = new Program();
        t.RunSynchronizer().Wait();
    }

    public async Task RunSynchronizer()
    {
        var traceWriter = new ConsoleTraceWriter();
        var taxonomyFactory = new ItaTaxonomyFactory();
        var synchronizer = new ItaTaxonomySynchronizer(traceWriter, taxonomyFactory);

        Stopwatch stopWatch = new Stopwatch();
        stopWatch.Start();

        await synchronizer.SyncAll();

        stopWatch.Stop();

        TimeSpan ts = stopWatch.Elapsed;
        // Format and display the TimeSpan value.
        string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
            ts.Hours, ts.Minutes, ts.Seconds,
            ts.Milliseconds / 10);
        Console.WriteLine("My RunTime " + elapsedTime);
    }

Вот код из внешнего синхронизатора dll

    public async Task SyncAll()
    {
        using (ClientContext context = new ClientContext(ConfigSettings.SiteUrl))
        {

            context.Credentials = new SharePointOnlineCredentials(
                "username",
                "password");
            var taxonomyService = TaxonomySession.GetTaxonomySession(context);
            var termStore = taxonomyService.GetDefaultSiteCollectionTermStore();
            context.Load(taxonomyService);
            context.Load(termStore);
            await context.ExecuteQueryAsync();
            }
         }

Вот моя команда сборки докера

docker build -t mylatestimage .

Вот моя команда запуска докера

docker run mylatestimage

Когда я запускаю исполняемый файл консольного приложения или сам проект в Visual Studio, все работает нормально.Когда я пытаюсь запустить докер, я ТОЛЬКО получаю вывод 'testing webjob', и программа обрывается в строке await synchronizer.SyncAll (), выдающей вышеупомянутую ошибку

Пожалуйста, дайте мне знать, как я могу это исправить

Большое спасибо за помощь

1 Ответ

0 голосов
/ 13 февраля 2019

Это стало возможным после того, как я переключился на контейнеры Windows на Docker и отключил Nano Server с помощью этой команды

docker pull mcr.microsoft.com/windows/nanoserver
...