编译可移植类库时是否有任何可与预处理器指令一起使用的符号

本文关键字:一起 指令 处理器 符号 预处理 类库 可移植 是否 任何可 编译 | 更新日期: 2023-09-27 18:31:20

我在我的解决方案中添加了一个可移植的类库,其中有一个链接到所有项目的全局文件。 此全局文件包含程序集级别属性,例如版本、区域性和 COM 可见性。 我想解决的问题是,某些属性(如 ComVisible)在 PCL 的上下文中无效,那么是否有任何符号与 #if 一起使用以防止在构建时包含该属性?

编译可移植类库时是否有任何可与预处理器指令一起使用的符号

可以在生成属性中配置自己的预处理器符号。我不知道默认情况下是否有任何特定的可移植类库,但是在项目的每个配置中指定一个并不难。

我通过将存根/虚拟属性类添加到模仿其 FCL 对应项的紧凑框架项目中来克服这个问题:

// Shared source file
[ComVisible(true)]
public class Foo
{
}
// Dummy class in portable project -- exists only to facilitate compilation of the shared source file
namespace System
{
    [AttributeUsage(AttributeTarget.Class)]
    public class ComVisibleAttribute : Attribute
    {
        public ComVisibleAttribue(bool visible)
        {
            // Dummy implementation
        }
    }
}

现在,共享源代码文件将在两个项目中编译,而无需对代码进行任何修改,也无需任何预处理器指令。