我应该将项目的目标处理器架构更改为什么?
To What Should I Change the Targeted Processor Architecture of my Project?
我创建了一个 .NET Core Winforms 应用程序(使用 C#),我想将其提交到 Windows 应用程序商店。按照它所说的 here,我在我的解决方案中添加了一个 Windows 应用程序打包项目:
我尝试创建包,但失败并显示此错误消息:
Severity Code Description Project File Line Suppression State
Error There was a mismatch between the processor architecture of the
project being built "MSIL" and the processor architecture of the
reference
"C:\Users\bclay\source\repos\F4F_Core\F4F_Core\bin\x86\Release\netcoreapp3.1\win-x86\F4F_Core.dll",
"x86". This mismatch may cause runtime failures. Please consider
changing the targeted processor architecture of your project through
the Configuration Manager so as to align the processor architectures
between your project and references, or take a dependency on
references with a processor architecture that matches the targeted
processor architecture of your project. WapProjTemplate1 C:\Program
Files (x86)\Microsoft Visual
Studio19\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets 2124
所以它说“考虑通过配置管理器更改项目的目标处理器架构”
这是配置管理器显示的内容:
它允许我添加新的或编辑现有的:
...但我不知道我应该尝试在此处添加或更改什么。
WapProjTemplate1.wapproj 文件中可能相关的部分是:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '15.0'">
<VisualStudioVersion>15.0</VisualStudioVersion>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x86">
<Configuration>Debug</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x86">
<Configuration>Release</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|AnyCPU">
<Configuration>Debug</Configuration>
<Platform>AnyCPU</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|AnyCPU">
<Configuration>Release</Configuration>
<Platform>AnyCPU</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup>
<WapProjPath Condition="'$(WapProjPath)'==''">$(MSBuildExtensionsPath)\Microsoft\DesktopBridge\</WapProjPath>
</PropertyGroup>
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.props" />
<PropertyGroup>
<ProjectGuid>235c6e85-cf17-455c-93b8-efdd1826a90e</ProjectGuid>
<TargetPlatformVersion>10.0.18362.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.14393.0</TargetPlatformMinVersion>
. . .
<HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
. . .
<ItemGroup>
<ProjectReference Include="..\F4F_Core\F4F_Core.csproj">
<SkipGetTargetFrameworkProperties>True</SkipGetTargetFrameworkProperties>
</ProjectReference>
</ItemGroup>
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.targets" />
</Project>
我没有更改这些(处理器架构)值中的任何默认设置。我需要更改什么才能成功创建包?
为主项目选择“项目”>“属性”显示:
为 Windows 应用程序打包项目选择项目属性显示:
如您所见,配置和平台被视为“N/A”,因此不可编辑。
更新
在“创建应用程序包”过程中,我保留了默认的“中性/发布(任何 CPU)”选择,如下所示:
更新 2
Microsoft 论坛上的此回答 [https://social.msdn.microsoft.com/Forums/windowsapps/en-US/461f4b46-f928-40da-8e49-7fd0f4754fd4/uwpmismatch-between-processor-architecture?forum=wpdevelop] 表明不应选择“任何”,而应选择“x86”[=28] =]
但是当我将主项目的目标从 Any 更改为 x86 时,它并没有更改上面的值:
明确地说,上面的“平台”下拉列表中只有一项:“活动(任何 CPU)”
更新 3
应 NicoZhu 的要求,我“用 Visual Studio 发送关于这个问题的反馈”,我打开了项目,立即看到了这个:
更新 4
所以我注意到 Visual Studio 中有一些通知。有人说为了开发 UWP 应用程序,我必须打开开发者模式。所以我这样做了...
开启后得到:
VS重启后,我再次尝试创建应用程序包,但得到了这个:
...但我不知道应用程序清单中的错误是什么,因此无法在不了解的情况下修复它们。
错误消息是否引用 Package.appxmanifest 中的值?
更新 5
整个解决方案及其两个项目的各种属性如下。
解决方法:
Winforms .NET Core 应用的属性:
Windows 应用程序打包项目的属性:
更新 6
下面的更新答案 确实 创建了包,但是当我随后尝试 运行 Windows 打包应用程序时,我得到了一个错误回复:两个项目中不匹配的处理器架构。请看我的后续问题 .
在测试空白项目时,我可以重现此问题,我们建议您针对此问题发送 Visual Studio 反馈。目前我们有一个解决方法,将 Winform platform target 编辑为 x86(不是 Platform 下拉列表),将应用程序包模板发布为 x86 发布包。
更新
右击winform项目->属性->构建->平台。
右键包模板项目->发布->创建应用包->侧载->跳过包签名
只检查 x86 架构。
我创建了一个 .NET Core Winforms 应用程序(使用 C#),我想将其提交到 Windows 应用程序商店。按照它所说的 here,我在我的解决方案中添加了一个 Windows 应用程序打包项目:
我尝试创建包,但失败并显示此错误消息:
Severity Code Description Project File Line Suppression State Error There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "C:\Users\bclay\source\repos\F4F_Core\F4F_Core\bin\x86\Release\netcoreapp3.1\win-x86\F4F_Core.dll", "x86". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project. WapProjTemplate1 C:\Program Files (x86)\Microsoft Visual Studio19\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets 2124
所以它说“考虑通过配置管理器更改项目的目标处理器架构”
这是配置管理器显示的内容:
它允许我添加新的或编辑现有的:
...但我不知道我应该尝试在此处添加或更改什么。
WapProjTemplate1.wapproj 文件中可能相关的部分是:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '15.0'">
<VisualStudioVersion>15.0</VisualStudioVersion>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x86">
<Configuration>Debug</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x86">
<Configuration>Release</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|AnyCPU">
<Configuration>Debug</Configuration>
<Platform>AnyCPU</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|AnyCPU">
<Configuration>Release</Configuration>
<Platform>AnyCPU</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup>
<WapProjPath Condition="'$(WapProjPath)'==''">$(MSBuildExtensionsPath)\Microsoft\DesktopBridge\</WapProjPath>
</PropertyGroup>
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.props" />
<PropertyGroup>
<ProjectGuid>235c6e85-cf17-455c-93b8-efdd1826a90e</ProjectGuid>
<TargetPlatformVersion>10.0.18362.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.14393.0</TargetPlatformMinVersion>
. . .
<HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
. . .
<ItemGroup>
<ProjectReference Include="..\F4F_Core\F4F_Core.csproj">
<SkipGetTargetFrameworkProperties>True</SkipGetTargetFrameworkProperties>
</ProjectReference>
</ItemGroup>
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.targets" />
</Project>
我没有更改这些(处理器架构)值中的任何默认设置。我需要更改什么才能成功创建包?
为主项目选择“项目”>“属性”显示:
为 Windows 应用程序打包项目选择项目属性显示:
如您所见,配置和平台被视为“N/A”,因此不可编辑。
更新
在“创建应用程序包”过程中,我保留了默认的“中性/发布(任何 CPU)”选择,如下所示:
更新 2
Microsoft 论坛上的此回答 [https://social.msdn.microsoft.com/Forums/windowsapps/en-US/461f4b46-f928-40da-8e49-7fd0f4754fd4/uwpmismatch-between-processor-architecture?forum=wpdevelop] 表明不应选择“任何”,而应选择“x86”[=28] =]
但是当我将主项目的目标从 Any 更改为 x86 时,它并没有更改上面的值:
明确地说,上面的“平台”下拉列表中只有一项:“活动(任何 CPU)”
更新 3
应 NicoZhu 的要求,我“用 Visual Studio 发送关于这个问题的反馈”,我打开了项目,立即看到了这个:
更新 4
所以我注意到 Visual Studio 中有一些通知。有人说为了开发 UWP 应用程序,我必须打开开发者模式。所以我这样做了...
开启后得到:
VS重启后,我再次尝试创建应用程序包,但得到了这个:
...但我不知道应用程序清单中的错误是什么,因此无法在不了解的情况下修复它们。
错误消息是否引用 Package.appxmanifest 中的值?
更新 5
整个解决方案及其两个项目的各种属性如下。
解决方法:
Winforms .NET Core 应用的属性:
Windows 应用程序打包项目的属性:
更新 6
下面的更新答案 确实 创建了包,但是当我随后尝试 运行 Windows 打包应用程序时,我得到了一个错误回复:两个项目中不匹配的处理器架构。请看我的后续问题
在测试空白项目时,我可以重现此问题,我们建议您针对此问题发送 Visual Studio 反馈。目前我们有一个解决方法,将 Winform platform target 编辑为 x86(不是 Platform 下拉列表),将应用程序包模板发布为 x86 发布包。
更新
右击winform项目->属性->构建->平台。
右键包模板项目->发布->创建应用包->侧载->跳过包签名
只检查 x86 架构。