Ой вэй. Совет в общем то простой убирайте зависимости это относится ко всяким рослинам, генераторам для EF и прочему стафу который цепляет студия. Плюс в настройках паблишинга есть вариант публиковать полную версию или версию для уже установленного фреймворка.
https://docs.microsoft.com/ru-ru/dotnet/core/deploying/
Кроме этого можно скопировать 1 раз файлы, а после просто заменять dll
Или же вариант создать инсталлер, который устанавливает фреймворк по необходимости.
Например WiX installer
Вот рабочий код без всякого мусора.
dotnet build -c Release-no-self
dotnet zip --no-restore -c Release-no-self
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>_444</RootNamespace>
<Configurations>Debug;Release;Release-no-self</Configurations>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>pdbonly</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-no-self|AnyCPU'">
<SelfContained>False</SelfContained>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Packaging.Targets" Version="$(PackagingNuGetVersion)" />
</ItemGroup>
<PropertyGroup>
<PostInstallScript>
</PostInstallScript>
<PostRemoveScript>
</PostRemoveScript>
</PropertyGroup>
<Target Name="PackageZip" DependsOnTargets="CreateZip" Outputs="$(ZipPath)"/>
<Target Name="PackageTarball" DependsOnTargets="CreateTarball" Outputs="$(TarballPath)"/>
<Target Name="PackageDebian" DependsOnTargets="CreateDeb" Outputs="$(DebPath)"/>
<Target Name="PackageRpm" DependsOnTargets="CreateRpm" Outputs="$(RpmPath)"/>
</Project>