Moniker Kerangka Target
Mari Berkenalan. Di .NET 5.0, untuk menggunakan Formulir Windows atau WPF, tidak cukup bagi kami hanya menentukan net5.0:
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
Saat mencoba menggunakan Formulir Windows atau WPF, kami mendapatkan kesalahan
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.
Solusinya, seperti kesalahannya, adalah menentukan Target Framework Moniker
<PropertyGroup>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
Bagaimana itu bekerja
Build akan secara otomatis mengimpor file dari Microsoft.NET.Sdk \ target.
Selanjutnya, dotnet \ sdk \ 5.0 \ Sdks \ Microsoft.NET.Sdk.WindowsDesktop \ target \ Microsoft.NET.Sdk.WindowsDesktop.props berisi kode:
<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')"/>
Dimana masalahnya
, 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
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
Haruskah Anda melakukan ini di perpustakaan?
Pasti ya!
Di satu sisi, ini memungkinkan Anda untuk menggunakan jenis dari Windows Forms atau WPF, di sisi lain, kolektor dapat membuang semua yang tidak terpakai dan menghasilkan ukuran file yang lebih kecil.