c# - 在 Docker 中运行项目时获取“System.TypeInitializationException”
问题描述
我有一个任务,我必须将我的 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 时,我只得到“测试 webjob”输出,程序在 await synchronizer.SyncAll() 行中断,产生上述错误
请让我知道如何解决它
非常感谢您的帮助
解决方案
在我切换到 Docker 上的 Windows 容器并使用此命令拉下 Nano Server 后,这是可能的
docker pull mcr.microsoft.com/windows/nanoserver
推荐阅读
- reactjs - 反应json检查是否为空?
- wordpress - Akismet 仅供评论
- algorithm - 检查循环图组件数量的算法无法正常工作
- r - 对不完整观察的每月时间序列进行平均
- mysql - 无法在 shell 中访问远程 MySQL 数据库
- kotlin - Kotlin Multiplatform Ktor linux 编译错误:找不到库-lcurl
- docker - Java-docker 无法连接到 Windows 上的 Docker 桌面
- sql - SQLAlchemy 加入函数 - 如何引用返回的列?
- spring-boot - Spring WebSocket Security [Project Reactor]:如何对用户进行身份验证并在网页之间维护此身份验证?
- debugging - Azure Artifact Nuget 包调试问题