.NET5.0コンソールアプリケーションのサイズを縮小します

ターゲットフレームワークモニカー

お知り合いになりましょう。.NET 5.0では、WindowsフォームまたはWPFを使用するには、net5.0を指定するだけでは不十分です。





<PropertyGroup>
  <TargetFramework>net5.0</TargetFramework>
  <UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
      
      



WindowsフォームまたはWPFを使用しようとすると、エラーが発生します





C:\Program Files\dotnet\sdk\5.0.201\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.DefaultItems.targets(369,5): error NETSDK1136: The target platform must be set to Windows (usually by including '-windows' in the TargetFramework property) when using Windows Forms or WPF, or referencing projects or packages that do so.
      
      



エラーが示唆するように、解決策はターゲットフレームワークモニカーを指定することです





<PropertyGroup>
  <TargetFramework>net5.0-windows</TargetFramework>
  <UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
      
      



使い方

ビルドは、Microsoft.NET.Sdk \ターゲットからファイルを自動的にインポートします。

さらに、dotnet \ sdk \ 5.0 \ Sdks \ Microsoft.NET.Sdk.WindowsDesktop \ targets \ Microsoft.NET.Sdk.WindowsDesktop.propsには次のコードが含まれています。





    <FrameworkReference Include="Microsoft.WindowsDesktop.App" IsImplicitlyDefined="true"
                        Condition="('$(UseWPF)' == 'true') And ('$(UseWindowsForms)' == 'true')"/>

    <FrameworkReference Include="Microsoft.WindowsDesktop.App.WPF" IsImplicitlyDefined="true"
                        Condition="('$(UseWPF)' == 'true') And ('$(UseWindowsForms)' != 'true')"/>

    <FrameworkReference Include="Microsoft.WindowsDesktop.App.WindowsForms" IsImplicitlyDefined="true"
                        Condition="('$(UseWPF)' != 'true') And ('$(UseWindowsForms)' == 'true')"/>
      
      



問題はどこだ

, FrameworkReference : .NET , NuGet





, - , Windows Forms WPF 'net5.0-windows'.





, .





Windows Forms WPF , 60 .









using System.Windows.Forms;

namespace Library
{
    public class Demo
    {
        void ShowForm()
        {
            var f = new Form();
            f.Show();
        }
    }
}

      
      







using System;

class Program
{
    public static void Main()
    {
        Console.WriteLine("Hello World!");
    }
}
      
      



, Library.Demo.





dotnet publish:





dotnet publish ConsoleApp.csproj --self-contained -c Release -r win-x64 /p:PublishSingleFile=true /p:PublishTrimmed=true /p:IncludeAllContentForSelfExtract=true
      
      



81,8!





IncludeAllContentForSelfExtract %TEMP%\.net .





?

Library.Demo, PublishTrimmed, Windows Forms .





dotnet publish , !





1

:





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

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <!--    -->
    <DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
  </PropertyGroup>


  <ItemGroup>
    <!-- .NET Runtime -->
    <!--      PrivateAssets="all"  ,     -->
    <FrameworkReference Include="Microsoft.NETCore.App" />
    
    <!-- Windows Desktop -->
    <!-- PrivateAssets="all" -     -->
    <FrameworkReference Include="Microsoft.WindowsDesktop.App" PrivateAssets="all"  />
    
    <!--     :
      Microsoft.WindowsDesktop.App.WPF
      Microsoft.WindowsDesktop.App.WindowsForms -->
  </ItemGroup>

</Project>
      
      



DisableImplicitFrameworkReference





PrivateAssets="all". .





2

.net5.0-windows .net5.0





:





dotnet publish ConsoleApp.csproj --self-contained -c Release -r win-x64 /p:PublishSingleFile=true /p:PublishTrimmed=true /p:IncludeAllContentForSelfExtract=true
      
      



18.8





あなたは図書館でこれをすべきですか?





絶対そうです!





これにより、WindowsフォームまたはWPFの型を使用できるようになり、コレクターは未使用のものをすべて破棄して、ファイルサイズを小さくすることができます。








All Articles