如何根据 C# 中的配置更改 com 接口?

How to change the com-interface depended on the configuration in C#?

我在 c# 中得到了一个 com 接口,如下所示:

[Serializable(), ClassInterface(ClassInterfaceType.None), ComVisible(true)]
[Guid("6e72b1ab-31ca-4852-9552-999999999999")]
[ProgId("SmartCard.SmartCardValidator")]
public class SmartCardValidator : ISmartCardValidator
{
    //...
}

由于某些原因,我必须使用相同的 class.

创建 2 个具有不同名称和不同 guid 的独立 com 接口

如何根据编译项目时使用的配置更改 ProgId 和 Guid?

在 C++ 中,我可能会用 #ifdef 做一些事情,但在 C# 中,我没有找到类似的东西。

在 C# 中也存在一些有限的预处理器支持。不过,您必须使用 #if <some condition> 而不是 #ifdef

那就是

#if Configuration1
[Guid("6e72b1ab-31ca-4852-9552-999999999999")]
#else
[Guid("6e72b1ab-31ca-4852-9552-000000000000")]
#endif

只能从命令行(或项目文件)或源文件的第一行设置条件。这意味着 #define 只允许在除注释之外的任何其他代码行之前。

要在项目中定义条件符号,请使用“项目属性 -> 构建 -> 条件编译符号”