.NET 5 не компилируется в исполняемые файлы с одним файлом

Хайя! У меня возникла проблема с попыткой скомпилировать мое приложение.NET 5 в один исполняемый файл при отладке через Visual Studio.

Мой CSProject ниже.

       <Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net50</TargetFramework>
    <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <PublishSingleFile>true</PublishSingleFile>
    <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
    <PlatformTarget>x64</PlatformTarget>
  </PropertyGroup>

</Project>

У меня установлен идентификатор среды выполнения, равный winx64, и для публикации одного файла установлено значение true, но при сборке у меня остается куча библиотек DLL, которые мое приложение использует для построения вместе с ним (всего 272). Мне было интересно - как мне упаковать эти DLL в это приложение? Я думал, что публикация его как одного исполняемого файла уже сделает это -

2 ответа

Для .Net 5, чтобы получить один исполняемый исполняемый файл при публикации проекта, важными свойствами являются:

  • Опубликовать одиночный файл
  • автономный
  • Инкудеаллконтентфорселфэкстракт
  • Идентификатор времени выполнения

Вам нужно либо включить их в файл проекта, либо указать их в командной строке.

Файл проекта:

      <Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <!--<OutputType>WinExe</OutputType>--><!--Use this for WPF or Windows Forms apps-->
        <TargetFramework>net5.0</TargetFramework>
        <!--<TargetFramework>net5.0-windows</TargetFramework>--><!--Use this for WPF or Windows Forms apps-->
        <PublishSingleFile>true</PublishSingleFile>
        <SelfContained>true</SelfContained>
        <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
        <RuntimeIdentifier>win-x64</RuntimeIdentifier><!--Specify the appropriate runtime here-->
    </PropertyGroup>

</Project>

Интерфейс командной строки:

      dotnet publish -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeAllContentForSelfExtract=true

Есть и другие свойства, которые стоит учитывать в зависимости от ваших потребностей, например:

  • ОпубликоватьTrimmed
  • ОпубликоватьReadyToRun

Смотрите страницы документации здесь:

https://docs.microsoft.com/en-us/dotnet/core/deploying/single-filehttps://github.com/dotnet/designs/blob/main/accepted/2020/single-file/design.md

Возникла аналогичная проблема при обновлении с .net core 3.1 до .net 6 для однофайлового приложения, когда приложение закрывалось сразу после запуска. Решение состояло в том, чтобы добавить приведенный ниже параметр в команду публикации.

      /p:IncludeAllContentForSelfExtract=true
Другие вопросы по тегам