Задать вопрос
YaKotikTvoy
@YaKotikTvoy
Стьюдик

Почему не происходит AOT компиляция?

Пытаюсь произвести AOT-компиляцию для консольного .net приложения. Для её проведения необходимо, чтобы в системе был CLang и zlib1g-dev (в Alt linux этот пакет носит название zlib-devel). Вроде всё установил.
68515e56d2831162157911.png
68515e93a9836952989501.png
Но при
$ dotnet publish -r linux-x64 -c Realese
Выводит:
/home/yakotiktvoy/Develop/CSharpLearn/C#13 Base/Chapter26/AOT Compilation/AOT Compilation.sln.metaproj : error MSB4126: указанная конфигурация решения "Realese|Any CPU" недопустима. Укажите допустимую конфигурацию решения с помощью свойств Configuration и Platform (например, MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU") или оставьте эти свойства пустыми, чтобы использовать конфигурацию решения по умолчанию.


Что-то нашел про ошибку MSB4126.
Просто вставил это в csproj проекта:
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>  
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

В результате получилось:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <RootNamespace>AOT_Compilation</RootNamespace>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PublishAot>true</PublishAot>
    <Configuration Condition=" '$(Configuration)' == '' ">linux</Configuration>  
    <Platform Condition=" '$(Platform)' == '' ">x64</Platform>
  </PropertyGroup>
</Project>

Но при
$ dotnet publish -c Realese -r linux-x64
тоже самое, что выше выходит.

А если просто запустить без флагов, то уже это:
[yakotiktvoy@YaKotikTvoyComputer AOT Compilation]$ dotnet publish
Восстановление завершено (0,4 с)
AOT Compilation сбой с ошибками (2) (1,7 с) → bin/Release/net9.0/linux-x64/AOT Compilation.dll
clang : error : no such file or directory: 'Compilation.exports'
/home/yakotiktvoy/.nuget/packages/microsoft.dotnet.ilcompiler/9.0.0/build/Microsoft.NETCore.Native.targets(376,5): error MSB3073: выход из команды ""clang" "obj/Release/net9.0/linux-x64/native/AOT Compilation.o" -o "bin/Release/net9.0/linux-x64/native/AOT Compilation" -Wl,--version-script=obj/Release/net9.0/linux-x64/native/AOT Compilation.exports -Wl,--export-dynamic -gz=zlib -fuse-ld=bfd /home/yakotiktvoy/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/9.0.0/sdk/libbootstrapper.o /home/yakotiktvoy/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/9.0.0/sdk/libRuntime.WorkstationGC.a /home/yakotiktvoy/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/9.0.0/sdk/libeventpipe-disabled.a /home/yakotiktvoy/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/9.0.0/sdk/libRuntime.VxsortEnabled.a /home/yakotiktvoy/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/9.0.0/sdk/libstandalonegc-disabled.a /home/yakotiktvoy/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/9.0.0/sdk/libstdc++compat.a /home/yakotiktvoy/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/9.0.0/framework/libSystem.Native.a /home/yakotiktvoy/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/9.0.0/framework/libSystem.Globalization.Native.a /home/yakotiktvoy/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/9.0.0/framework/libSystem.IO.Compression.Native.a /home/yakotiktvoy/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/9.0.0/framework/libSystem.Net.Security.Native.a /home/yakotiktvoy/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/9.0.0/framework/libSystem.Security.Cryptography.Native.OpenSsl.a /home/yakotiktvoy/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/9.0.0/sdk/libz.a -g -Wl,-rpath,'$ORIGIN' -Wl,--build-id=sha1 -Wl,--as-needed -pthread -ldl -lrt -lm -pie -Wl,-pie -Wl,-z,relro -Wl,-z,now -Wl,--eh-frame-hdr -Wl,--discard-all -Wl,--gc-sections" с кодом 1.

Сборка сбой с ошибками (2) через 2,3 с


А если закомментировать, то что было добавлено:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <RootNamespace>AOT_Compilation</RootNamespace>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PublishAot>true</PublishAot>
    <!--<Configuration Condition=" '$(Configuration)' == '' ">linux</Configuration>  
    <Platform Condition=" '$(Platform)' == '' ">x64</Platform>-->
  </PropertyGroup>
</Project>

и снова запустить publish без флагов, то выведет тоже самое, что и выше, то есть ошибку MSB3073, на осознание которой мне мозгов уже точно не хватит.

Почему не происходит AOT-компиляция? Использую .net9.

Код консоли:
using static System.Console;

WriteLine("BarsikScript");
  • Вопрос задан
  • 53 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Zerg89
Проблема может быть связана с местоположением вашего проекта, путь может содержать пробелы, попробуйте удалить пробелы или изменить местоположение проекта на путь без пробелов.
/home/yakotiktvoy/Develop/CSharpLearn/C#13 Base/Chapter26/AOT Compilation/AOT Compilation.sln.metaproj


Ps Также возможно проблема здесь
Укажите допустимую конфигурацию решения с помощью свойств Configuration и Platform (например, MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU")

Platform Condition=" '$(Platform)' == '' ">AnyCPU
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы