如果平台目标未设置为x86,如何生成编译器错误?
动机:一种特殊方法动态加载32位COM dll。如果项目是为“x64”或“任何CPU”构建的并且在64位环境中运行,那么在运行时自然加载COM对象会失败。我想要一个编译时检查,以确保不会发生这种情况。
这是对项目设置的安全检查,完全封装在需要32位的源文件中。所以我不能接受需要在项目设置中定义条件编译符号的解决方案(例如this)。
答案 0 :(得分:1)
您可以编写Roslyn诊断分析器来执行此操作。
首先,在代码中写一些内容进行搜索。例如,您可以使用属性。它可以是汇编级属性,例如:
[assembly: Require32bit]
它也可以是您应用于类的属性,甚至是您选择的调用COM组件的方法。
然后编写一个分析器来搜索它的存在。在分析器中,您可以使用Compilation.Options.Platform
属性来确定平台。汇编可从例如SyntaxNodeAnalysisContext
。
答案 1 :(得分:0)
您尝试过类似的事情吗?
#if PLATFORM_X86
#error Target platform needs to be x86!
#endif