Я попытался получить консольное приложение .NET core 2.0, ориентированное на win-x86, для сборки с использованием corert Компилятор ilc и компоновщик Microsoft.
На данный момент я скачал последнюю версию библиотек corert и успешно создал предварительный просмотр, используя цель выпуска по состоянию на коммит c7781a90f00645f6bd06ef57e5d3fd879fe3e9a0.
Я добавил сценарии сборки rd.xml, ilc.rsp и link.rsp, но продолжаю получать сообщение от ilc:
Error: Target architecture is not supported
Internal.CommandLine.CommandLineException: Target architecture is not supported
at ILCompiler.Program.Run(String[] args)
at ILCompiler.Program.Main(String[] args)
ОБНОВИТЬ: Мне удалось решить проблему с архитектурой, но теперь она терпит неудачу с отсутствующей ссылкой на файл:
C:\testapp>call "..\corert\bin\Windows_NT.x64.Release\tools\ilc.exe" ".\ilc.rsp"Error: [TEMPORARY EXCEPTION MESSAGE] FileLoadErrorGeneric: Microsoft.Extensions.Options
Internal.TypeSystem.TypeSystemException+FileNotFoundException: [TEMPORARY EXCEPTION MESSAGE] FileLoadErrorGeneric: Microsoft.Extensions.Options
at Internal.TypeSystem.ThrowHelper.ThrowFileNotFoundException(ExceptionStringID id, String fileName)
at ILCompiler.CompilerTypeSystemContext.GetModuleForSimpleName(String simpleName, Boolean throwIfNotFound)
at Internal.TypeSystem.CustomAttributeTypeNameParser.GetTypeByCustomAttributeTypeName(ModuleDesc module, String name, Boolean throwIfNotFound, Func`4 resolver)
at Internal.TypeSystem.CustomAttributeTypeNameParser.GetTypeByCustomAttributeTypeName(ModuleDesc module, String name, Boolean throwIfNotFound, Func`4 resolver)
at ILCompiler.RdXmlRootProvider.ProcessTypeDirective(IRootingServiceProvider rootProvider, ModuleDesc containingModule, XElement typeElement)
at ILCompiler.RdXmlRootProvider.ProcessAssemblyDirective(IRootingServiceProvider rootProvider, XElement assemblyElement)
at ILCompiler.RdXmlRootProvider.AddCompilationRoots(IRootingServiceProvider rootProvider)
at ILCompiler.Compilation..ctor(DependencyAnalyzerBase`1 dependencyGraph, NodeFactory nodeFactory, IEnumerable`1 compilationRoots, DebugInformationProvider debugInformationProvider, Logger logger)
at ILCompiler.ILScannerBuilder.ToILScanner()
at ILCompiler.Program.Run(String[] args)
at ILCompiler.Program.Main(String[] args)
ОБНОВЛЕНИЕ 2: Я смог решить проблемы, найдя ссылки на все отсутствующие файлы, но в конце концов я понял, что мне нужно переключить цель архитектуры на x64, однако теперь это не удается на компоновщике:
C:\testapp>call link @".\link.rsp"libcpmt.lib(nothrow.obj) : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64'
Проблема вызвана использованием командной строки разработчика вместо командной строки x64 Native Tools. Первый по умолчанию нацелен на x86, а второй нацелен на x64 и будет связываться с библиотеками x64.
Других решений пока нет …