【发布时间】:2017-02-10 21:46:29
【问题描述】:
我正在开发一个客户端-服务器库。某些类可以由客户端或服务器使用,但执行方式不同,并且每个类产生的结果略有不同。同样,服务器代码可能包含不会从客户端构建中调用的其他方法。
一个类可能如下所示:
public class StuffDoer {
public void DoStuff(object msg)
{
ServerDoStuff(msg);
ClientDoStuff(msg);
}
[Conditional("SERVER")]
private void ServerDoStuff(object msg)
{
// Do secret server stuff...
}
[Conditional("CLIENT")]
private void ClientDoStuff(object msg)
{
// Do client sutff...
}
[Conditional("SERVER")]
public void DoCoolStuff(object msg)
{
// server does cool stuff...
}
}
我读过 Conditional 属性仍然编译代码,因此会在构建中,不像预处理器指令会完全删除代码甚至不编译它。
我担心不诚实的客户可能会通过不混淆源代码并弄清楚服务器的工作原理来破解产品。
我的担心是没有根据的还是我需要放置预处理器指令来隐藏源代码?
【问题讨论】:
-
如果我必须在两者之间进行选择,我的选择是预处理器指令。
ConditionalAttribute不会隐藏类的“内部结构”,因为服务器特定代码仍将编译为 MSIL(仅删除对方法的调用)。此外,ConditionalAttribute在应用它的位置和方式方面非常有限:仅返回从Attribute派生的无效方法和类
标签: c# security conditional-compilation preprocessor-directive conditional-attribute