1

我有一个Project A将用作Project B中的参考。

项目 A有一个类,其方法应该是可见或不可见,具体取决于项目 B中指定的条件。假设如果在项目 B 的 web.config appSettings 中有一个值为“true”的键“DisplayMethod”,则该方法将可见。

这更像是一个版本控制。我不想为 Project A 的新版本创建单独的 dll。我希望单个 dll 能够同时支持新旧版本。这样项目 B 的开发人员可以轻松地在 web.config 中切换版本,重建项目,他很高兴。

限制

  • 我无法控制项目 B。我只能要求项目 B 的开发人员进行简单的修改,如 web.config 修改。
  • 我不知道哪些项目将使用项目 A。项目 A 是一个开源项目,任何人都可以使用,可能有数千个项目。

“方法将是可见的”是指与以下代码相同的功能:

[EditorBrowsable(EditorBrowsableState.Never)]
public string SomeMethod(string s)
{
    return "Hello " + s;
}

迄今为止的研究:

我见过这个问题。但是,接受的答案对我不起作用,因为那里的条件常数只能在方法所在的同一项目的项目属性中设置。

条件命名空间也可以,但我也面临同样的问题。

4

2 回答 2

0

如果“对”可见,您的意思是“只能通过”访问,那么您可以利用朋友程序集。它允许另一个程序集访问标记为内部的方法/属性/字段等。

为了使其工作,您需要在编译时声明 B 是 A 的朋友。

于 2013-07-31T18:38:18.400 回答
0

编译器必须在编译时知道属性的值。所以你想要达到的目标是不可能的。我不是这方面的专家,但也许Mono Cecil能够做到这一点。虽然我不确定它是否值得。

于 2013-07-31T18:34:22.103 回答