在Docker中运行项目时获取'System.TypeInitializationException'

时间:2019-02-11 15:26:01

标签: c# docker .net-core csom

我有一个任务,我必须将CSOM .NET CORE 2.2项目放入docker。

该项目由一个控制台应用程序组成,该应用程序调用用于更新分类字段的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命令

docker build -t mylatestimage .

这是我的docker run命令

docker run mylatestimage

当我在Visual Studio中运行控制台应用程序的可执行文件或项目本身时,一切运行正常。当我尝试运行docker时,我仅获得“ testing webjob”输出,并且程序在 等待synchronizer.SyncAll()行产生上述错误

请让我知道我该如何解决

非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我有可能在Docker上切换到Windows容器并使用此命令关闭了Nano Server之后

docker pull mcr.microsoft.com/windows/nanoserver