.NET Core глобальный и автономный exe-файл

#c# #command-line-interface #.net-core-2.2

#c# #интерфейс командной строки #.net-core-2.2

Вопрос:

Я создаю exe-файл, который я хочу использовать как «глобальный инструмент dotnetcore», а также как автономный exe-файл. Вот как выглядит мой csproj:

   <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <LangVersion>7.1</LangVersion>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
    <PackAsTool>true</PackAsTool>
    <IsPackable>true</IsPackable>
    <ToolCommandName>HostRunner</ToolCommandName>
    <PackageOutputPath>./nupkg</PackageOutputPath>
    <AssemblyName>HostRunner</AssemblyName>
  </PropertyGroup>
  

Я могу запустить dotnet pack без проблем, но когда я запускаю

 dotnet publish my.csproj -r=win10-x64 -c=Debug --self-contained
  

Я получаю сообщение об ошибке error NETSDK1053: Pack as tool does not support self contained.

Что я делаю не так ?!

Ответ №1:

Вам нужны два csproj. Один для пакета nuget и один для exe-файла. Сделайте exe-файл с использованием пакета nuget.

Ответ №2:

Я столкнулся с той же проблемой. Я использую отдельную группу свойств, определенную следующим образом:

 <PropertyGroup Condition="$(TargetFramework) != 'net462'">
    <PackAsTool>true</PackAsTool>
    <ToolCommandName>my-command</ToolCommandName>
    <PackageOutputPath>./nupkg</PackageOutputPath>
</PropertyGroup>
  

Комментарии:

1. Можете ли вы объяснить, что делает «$ (RuntimeIdentifier) == «»?

Ответ №3:

Та же проблема здесь, нашел ответ на GitHub

просто удалил директиву

 <PackAsTool>true</PackAsTool>
  

в файле .csproj все работало так же, как и раньше.