这个问题是关于使用之间的区别/p:Platform=x64
在 MSBuild 命令行上与使用<Platform>x64</Platform>
在 csproj 文件中。
我制作了两个简单的 c# NET 5 解决方案/项目,其中包含一个可执行文件 (HsConsole) 和一个类库 (HsLogger),以调查何时发生 MSB3270 架构不匹配。这是错误消息示例。
warning MSB3270: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "HsLogger", "AMD64".
** 请注意,错误消息涉及 MSIL (hsconsole) 和 AMD64 (hslogger),即使命令行和项目文件都指定 x64 而不是 AMD64。
HsLogger 记录器使用构建后事件将类库复制到存储用于在项目之间共享的库的文件夹。 HsConsole 项目引用该文件夹中的类库 HsLogger。
问题是,每当我使用时,我都会收到 MSB3270 错误消息(编译 HsConsole 时)/p:"Platform=x64"
在 MSbuild 命令行上,但当我在命令行上不使用参数时则不会。<Platform>x64</Platform>
在这两种情况下,已在 HsLogger 项目文件中声明。
这是两个项目文件:
HsLogger
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Platform>x64</Platform>
<TargetFramework>net5.0-windows7.0</TargetFramework>
</PropertyGroup>
</Project>
HsConsole
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Platform>AnyCPU</Platform>
<TargetFramework>net5.0-windows7.0</TargetFramework>
</PropertyGroup>
</Project>
以下是实验结果的总结:
MSBuild hslogger.csproj /t:clean;restore;build -> compiles okay
MsBuild hsconsole.csproy /t:clean;restore;build -> no MSB3270 error
MSBuild hslogger.csproj /t:clean;restore;build /p:Platform=x64 -> compiles okay
MsBuild hsconsole.csproj /t:clean;restore;build -> gives MSB3270 error as shown above
** 请注意,错误消息谈论的是 MSIL (hsconsole) 与 AMD64 (hslogger)。
Q1.为什么只使用 x64 时错误消息中显示的是 AMD64?
Q2。当命令行和内部属性都指定 x64 时,为什么会产生错误消息?