如果平台目标不是x86,生成编译器错误

本文关键字:编译器 错误 x86 平台 目标 如果 | 更新日期: 2023-09-27 18:12:37

如果平台目标未设置为x86,如何生成编译器错误?

动机:一个特定的方法动态加载一个32位的COM dll。如果项目是为"x64"或"任意CPU"构建的,并且在64位环境中运行,那么加载COM对象在运行时自然会失败。我需要一个编译时检查来确保这不会发生。

这是对项目设置的安全检查,完全封装在需要32位的源文件中。因此,我不能接受需要在项目设置中定义条件编译符号的解决方案(如此)。

如果平台目标不是x86,生成编译器错误

你可以写一个Roslyn诊断分析器来做这件事。

首先,在代码中编写要搜索的内容。例如,您可以使用属性。它可以是程序集级属性,例如:

[assembly: Require32bit]

它也可以是应用于类的属性,甚至是调用COM组件的方法,根据您的选择。

然后编写一个分析程序来搜索这个的存在。在分析仪中,可以使用Compilation.Options.Platform属性来确定平台。编译可以从SyntaxNodeAnalysisContext中获得。

你有没有试过:

#if PLATFORM_X86
    #error Target platform needs to be x86!
#endif