У меня есть задание, где я должен поместить свой проект 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 (), выдающей вышеупомянутую ошибку
Пожалуйста, дайте мне знать, как я могу это исправить
Большое спасибо за помощь