c# - 在 Visual Studio 项目中混合项目平台目标
问题描述
尽管在线阅读了许多文章,但我仍然对哪些平台目标程序集可以相互混合感到困惑。
为了测试这一点,我创建了一个包含三个控制台应用程序项目和三个 .Net Framework 类库的 Visual Studio 解决方案。
控制台应用程序项目是 AnyCPUApp、X86App 和 X64App,并在配置管理器和项目属性 > 构建中设置了相应的平台目标。库项目是 AnyCPULib、X86Lib 和 X64Lib,并在配置管理器和项目属性 > 构建中设置了相应的平台目标。
X86App 将使用 AnyCPULib 和 X86Lib 构建和运行。当 X86App 引用 X64Lib 时,编译器会给出“处理器架构不匹配”警告,如果您尝试运行它,它会因 System.badImageFormatException 而崩溃。
X64App 将使用 AnyCPULib 和 X64Lib 构建和运行。当 X64App 引用 X86Lib 时,编译器会给出“处理器架构不匹配”警告,如果您尝试运行它,它会因 System.badImageFormatException 而崩溃。
我的问题:
- 为什么 AnyCPUApp 针对 X86Lib 运行(带有“处理器架构不匹配”警告),而不针对 X64Lib?
- 是否存在处理器架构不匹配会导致运行时故障的实际情况?
- AnyCPU 仅适用于类库吗?
我的 xxxApp 代码看起来像(将 xxx 更改为 AnyCPU|X86|X64,取消注释子句以测试和更新项目引用:
namespace xxxApp {
class Program {
static void Main(string[] args) {
//var anyCPULib = new AnyCPULib.AnyCPULib();
//Console.WriteLine(anyCPULib.Hello);
//System.Diagnostics.Debug.WriteLine(anyCPULib.Hello);
//var x86Lib = new X86Lib.X86Lib();
//Console.WriteLine(x86Lib.Hello);
//System.Diagnostics.Debug.WriteLine(x86Lib.Hello);
//var x64Lib = new X64Lib.X64Lib();
//Console.WriteLine(x64Lib.Hello);
//System.Diagnostics.Debug.WriteLine(x64Lib.Hello);
}
}
}
我的 xxxLib 代码看起来像(将 xxx 更改为 AnyCPU|X86|X64)
namespace AnyCPULib
{
public class AnyCPULib
{
public string Hello { get { return "Hello from AnyCPULib"; } }
}
}
我正在使用 Visual Studio 2019 版本 16.8.0 和 .NET Framework 4.8
解决方案
推荐阅读
- excel - 保存在 VBA 中时添加到 xlsm 工作表的代码不断变化
- mongodb - 重新创建 MongoDB 容器不会在 docker-entrypoint-initdb.d 中重新运行 config.js 文件
- spring - Spring Boot & Data Repositories - 片段实现 x 未实现 x
- arrays - 使用 React Native 'fetch' 方法访问嵌套在数组中的第二级深层信息
- python-3.x - 如何在字节Python中替换双斜杠
- angular - 如何使用索引而不是角度的属性名称来显示列表数据
- python - Keras Sequential 是否与多个 train_on_batch 调用相同?
- css - CSS未显示在谷歌浏览器的覆盖选项卡中
- angular - 如何在 Angular 2 中的 route.navigate 之后刷新组件 UI?
- perforce - Perforce Helix Core:是否有权限更改触发器?