最近编译WinSW,提示:修整程序集需要 .NET Core 3.0 或更高版本。
百思不得解,最后原来我不知道“修整程序”,在csproj文件中这么一段
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFrameworks>net461;net6.0-windows</TargetFrameworks> <LangVersion>latest</LangVersion> <Nullable>enable</Nullable> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> <PublishTrimmed>true</PublishTrimmed>
最后一行,就是“修整”。而net461是不支持的。所以在编译到461就提示有问题了。问AI,回复如下:
在你的 .csproj 文件中,使用 <TargetFrameworks> 指定了多个目标框架,包括 net461 和 net6.0-windows。你启用了 <PublishTrimmed>true</PublishTrimmed>,这意味着你希望在发布时对程序集进行修整(trimming)。
然而,修整功能只适用于 .NET Core 3.0 及更高版本,而 net461 是 .NET Framework 的一个版本,因此它不支持修整。 为了解决这个问题,你有以下几种选择: 1。移除不支持修整的框架: 如果你不需要支持 net461,可以将其移除,只保留支持修整的框架。例如: <TargetFrameworks>net6.0-windows</TargetFrameworks> <PublishTrimmed>true</PublishTrimmed> 2。使用条件编译: 如果你需要同时支持 .NET Framework 和 .NET Core/.NET 5+,你可以为不同的目标框架使用条件编译来启用或禁用修整。例如: <PropertyGroup> <PublishTrimmed Condition="'$(TargetFramework)' == 'net6.0-windows'">true</PublishTrimmed> <PublishTrimmed Condition="'$(TargetFramework)' == 'net461'">false</PublishTrimmed> </PropertyGroup> 3/将项目迁移到 .NET 5 或 .NET 6: 考虑将整个项目迁移到仅使用 .NET 5 或 .NET 6,这样你就可以利用最新的功能,包括修整。
我选择2,最后的csproj修改为类似以下
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFrameworks>net461;net6.0-windows</TargetFrameworks> <LangVersion>latest</LangVersion> <Nullable>enable</Nullable> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> <PublishTrimmed>true</PublishTrimmed> <AssemblyTitle>Windows Service Wrapper</AssemblyTitle> </PropertyGroup> <PropertyGroup> <PublishTrimmed Condition="'$(TargetFramework)' == 'net6.0-windows'">true</PublishTrimmed> <PublishTrimmed Condition="'$(TargetFramework)' == 'net461'">false</PublishTrimmed> </PropertyGroup>
标签:Core,3.0,修整,net461,NET,true From: https://www.cnblogs.com/kevin-Y/p/18578495