如何发布仅含x86文件夹及.deploy文件的.NET Framework WinForm应用?
问题描述
我正在将一个基于.NET Framework v4.7.2的WinForm应用发布到本地文件夹,发布完成后生成了arm、arm64、musl-x64、x64和x86五个平台文件夹。我已经在Visual Studio所有可设置位置将目标平台/CPU设为x86,但那些不需要的文件夹每个都超过7MB,导致发布文件夹总容量接近80MB。删除这些多余文件夹后,setup.exe无法运行,因为它会查找这些缺失的文件夹。
当前项目csproj文件中相关配置如下:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> <PlatformTarget>x86</PlatformTarget> <DebugSymbols>true</DebugSymbols> <DebugType>full</DebugType> <Optimize>false</Optimize> <OutputPath>bin\Debug\</OutputPath> <DefineConstants>DEBUG;TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> <PlatformTarget>x86</PlatformTarget> <DebugType>pdbonly</DebugType> <Optimize>true</Optimize> <OutputPath>bin\Release\</OutputPath> <DefineConstants>TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> </PropertyGroup>
解决方案
修正发布向导的目标运行时设置
打开Visual Studio的发布向导,找到目标运行时选项,选择特定运行时,然后指定为win-x86,不要选择“便携”或默认的多平台选项——如果选便携模式,发布工具会自动生成多平台的运行时文件夹。全局配置项目的平台和运行时
在csproj文件的根级<PropertyGroup>(不带Condition条件的那个)中添加以下配置,强制锁定x86平台:<PropertyGroup> <PlatformTarget>x86</PlatformTarget> <RuntimeIdentifier>win-x86</RuntimeIdentifier> <SelfContained>false</SelfContained> <!-- .NET Framework依赖系统已安装的框架,无需自包含 --> </PropertyGroup>这个全局配置会覆盖仅针对Debug/Release+x86的局部配置,确保发布流程全程以x86为目标。
清理缓存后重新发布
删除项目目录下的bin和obj文件夹,然后重新生成项目并执行发布操作,避免旧的缓存文件干扰新的发布配置。检查全局配置文件
查看项目所在目录是否存在Directory.Build.props或Directory.Build.targets文件,这些文件可能会全局覆盖项目的平台设置。如果存在,确保文件内的<PlatformTarget>也设置为x86。
内容的提问来源于stack exchange,提问作者atronbrat
相关产品推荐
相关产品推荐

