Сообщение Re: retarget-compiler to dotnet core от 01.03.2020 13:46
Изменено 01.03.2020 13:57 VladD2
Re: retarget-compiler to dotnet core
Здравствуйте, varenikAA, Вы писали:
AA>выполняю Build-core.cmd из каталога c:\tmp\nemerle
AA>исправив
AA>
AA>на
AA>
Зачем? При этом не собрались некоторые части компилятора вроде плагина для поддержки C#.
AA>Изначально ругался невозможность загрузить SecurityAttribute
Это потому что ты не указал сборку где этот атрибут находится.
AA>
Это делать нельзя, так как это привязывает компилятор к платформе.
AA>Затем стал ругаться на маркосы, добавил configProperties в ncc.runtimeconfig.json:
Короче, попробовал сам собрать компилятор под Кор и им же собрать хэлоуворлд. Напаролся на проблему с загрузкой стандартной макро-сборки (которая грузится по имени). Похоже Assembly.LoadWithPartialName() в корке не реализованна должным образом. Провел следственные эксперементы и обнаружил, что в 4.6.1 дотнете и корке обычный Assembly.Load() умеет грузить сборки по частичному имени. По сему заменил Assembly.LoadWithPartialName на Assembly.Load. Смотри последний коммит.
Ну, а далее все спокойно собралось. Только нужно задавать все референсы явно. Проще всего это сделать собрав корочный проект C#-ом и подсмотрев в выхлопе студии (предворительно подняв уровень выхлопа до Detailed) командную строку csc.exe. Что я и сделал. На основе полученного списка сборок составил следующий файл ответов:
Далее я написал test1.n следующего содержания:
М скромил response.txt компилятору:
В результате получился test1.dll.
Далее я создал test1.runtimeconfig.json для него:
И выполнил:
AA>выполняю Build-core.cmd из каталога c:\tmp\nemerle
AA>исправив
AA>
AA>msbuild NemerleAll.nproj /t:Stage1;CompilerTests;_ComputationExpressions;_Async;Install /p:NTargetName=Build;Configuration=%Config%;NInstall=c:\RSDN\nemerle\bin\%Config%\net-4.0
AA>
AA>на
AA>
AA>msbuild NemerleAll.nproj /t:Stage1;Install /p:NTargetName=Build;Configuration=%Config%;NInstall=c:\tmp\nemerle\bin\%Config%\net-4.0
AA>
Зачем? При этом не собрались некоторые части компилятора вроде плагина для поддержки C#.
AA>Изначально ругался невозможность загрузить SecurityAttribute
Это потому что ты не указал сборку где этот атрибут находится.
AA>
AA> SecurityAttribute_tc = lookup("System.Object");// - обошел заменив на объект и пересобрав
AA>
Это делать нельзя, так как это привязывает компилятор к платформе.
AA>Затем стал ругаться на маркосы, добавил configProperties в ncc.runtimeconfig.json:
Короче, попробовал сам собрать компилятор под Кор и им же собрать хэлоуворлд. Напаролся на проблему с загрузкой стандартной макро-сборки (которая грузится по имени). Похоже Assembly.LoadWithPartialName() в корке не реализованна должным образом. Провел следственные эксперементы и обнаружил, что в 4.6.1 дотнете и корке обычный Assembly.Load() умеет грузить сборки по частичному имени. По сему заменил Assembly.LoadWithPartialName на Assembly.Load. Смотри последний коммит.
Ну, а далее все спокойно собралось. Только нужно задавать все референсы явно. Проще всего это сделать собрав корочный проект C#-ом и подсмотрев в выхлопе студии (предворительно подняв уровень выхлопа до Detailed) командную строку csc.exe. Что я и сделал. На основе полученного списка сборок составил следующий файл ответов:
response.txt | |
| |
Далее я написал test1.n следующего содержания:
System.Console.WriteLine("Hello!!! " + typeof(string).Assembly.Location);
М скромил response.txt компилятору:
dotnet ncc-core.dll @tesponce.txt
В результате получился test1.dll.
Далее я создал test1.runtimeconfig.json для него:
{
"runtimeOptions": {
"tfm": "netcoreapp2.1",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "2.1.0"
}
}
}
И выполнил:
c:\!\RSDN\nemerle\bin\Debug\net-4.0\Stage1>dotnet test1.dll
Hello!!! C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.13\System.Private.CoreLib.dll
Re: retarget-compiler to dotnet core
Здравствуйте, varenikAA, Вы писали:
AA>выполняю Build-core.cmd из каталога c:\tmp\nemerle
AA>исправив
AA>
AA>на
AA>
Зачем? При этом не собрались некоторые части компилятора вроде плагина для поддержки C#.
AA>Изначально ругался невозможность загрузить SecurityAttribute
Это потому что ты не указал сборку где этот атрибут находится.
AA>
Это делать нельзя, так как это привязывает компилятор к платформе.
AA>Затем стал ругаться на маркосы, добавил configProperties в ncc.runtimeconfig.json:
Короче, попробовал сам собрать компилятор под Кор и им же собрать хэлоуворлд. Напаролся на проблему с загрузкой стандартной макро-сборки (которая грузится по имени). Похоже Assembly.LoadWithPartialName() в корке не реализованна должным образом. Провел следственные эксперементы и обнаружил, что в 4.6.1 дотнете и корке обычный Assembly.Load() умеет грузить сборки по частичному имени. По сему заменил Assembly.LoadWithPartialName на Assembly.Load. Смотри последний коммит.
Ну, а далее все спокойно собралось. Только нужно задавать все референсы явно. Проще всего это сделать собрав корочный проект C#-ом и подсмотрев в выхлопе студии (предворительно подняв уровень выхлопа до Detailed) командную строку csc.exe. Что я и сделал. На основе полученного списка сборок составил следующий файл ответов:
Далее я написал test1.n следующего содержания:
М скромил response.txt компилятору:
В результате получился test1.dll.
Далее я создал test1.runtimeconfig.json для него:
И выполнил:
AA>выполняю Build-core.cmd из каталога c:\tmp\nemerle
AA>исправив
AA>
AA>msbuild NemerleAll.nproj /t:Stage1;CompilerTests;_ComputationExpressions;_Async;Install /p:NTargetName=Build;Configuration=%Config%;NInstall=c:\RSDN\nemerle\bin\%Config%\net-4.0
AA>
AA>на
AA>
AA>msbuild NemerleAll.nproj /t:Stage1;Install /p:NTargetName=Build;Configuration=%Config%;NInstall=c:\tmp\nemerle\bin\%Config%\net-4.0
AA>
Зачем? При этом не собрались некоторые части компилятора вроде плагина для поддержки C#.
AA>Изначально ругался невозможность загрузить SecurityAttribute
Это потому что ты не указал сборку где этот атрибут находится.
AA>
AA> SecurityAttribute_tc = lookup("System.Object");// - обошел заменив на объект и пересобрав
AA>
Это делать нельзя, так как это привязывает компилятор к платформе.
AA>Затем стал ругаться на маркосы, добавил configProperties в ncc.runtimeconfig.json:
Короче, попробовал сам собрать компилятор под Кор и им же собрать хэлоуворлд. Напаролся на проблему с загрузкой стандартной макро-сборки (которая грузится по имени). Похоже Assembly.LoadWithPartialName() в корке не реализованна должным образом. Провел следственные эксперементы и обнаружил, что в 4.6.1 дотнете и корке обычный Assembly.Load() умеет грузить сборки по частичному имени. По сему заменил Assembly.LoadWithPartialName на Assembly.Load. Смотри последний коммит.
Ну, а далее все спокойно собралось. Только нужно задавать все референсы явно. Проще всего это сделать собрав корочный проект C#-ом и подсмотрев в выхлопе студии (предворительно подняв уровень выхлопа до Detailed) командную строку csc.exe. Что я и сделал. На основе полученного списка сборок составил следующий файл ответов:
response.txt | |
| |
Далее я написал test1.n следующего содержания:
System.Console.WriteLine("Hello!!! " + typeof(string).Assembly.Location);
М скромил response.txt компилятору:
dotnet ncc-core.dll @tesponce.txt
В результате получился test1.dll.
Далее я создал test1.runtimeconfig.json для него:
{
"runtimeOptions": {
"tfm": "netcoreapp2.1",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "2.1.0"
}
}
}
И выполнил:
c:\!\RSDN\nemerle\bin\Debug\net-4.0\Stage1>dotnet test1.dll
Hello!!! C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.13\System.Private.CoreLib.dll