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

时间:2016-10-12 08:35:12

标签: c#

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以编写Roslyn诊断分析器来执行此操作。

首先,在代码中写一些内容进行搜索。例如,您可以使用属性。它可以是汇编级属性,例如:

[assembly: Require32bit]

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

然后编写一个分析器来搜索它的存在。在分析器中,您可以使用Compilation.Options.Platform属性来确定平台。汇编可从例如SyntaxNodeAnalysisContext

答案 1 :(得分:0)

您尝试过类似的事情吗?

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