Я разрабатываю клиент-серверную библиотеку. Некоторые из классов могут использоваться либо клиентом, либо сервером, но выполняются по-разному и дают несколько разные результаты для каждого. Кроме того, код сервера может содержать дополнительные методы, которые не будут вызываться из сборки клиента.Защищают ли предпроцессорные директивы код сервера от клиента?
Класс может выглядеть следующим образом:
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...
}
}
Я прочитал, что условный атрибут еще компилирует код и, следовательно, будет в сборке, в отличие от директив препроцессора, которые бы полностью удалить код и даже не компилировать его.
Я обеспокоен тем, что нечестный клиент может взломать продукт путем размывания исходного кода и выяснить, как работает сервер.
Являются ли мои опасения необоснованными или мне нужно будет размещать предпроцессорные директивы, чтобы скрыть исходный код?
директивы Если бы мне пришлось выбирать между ними, мой выбор будет предварительно процессор. 'ConditionalAttribute' не будет скрывать« внутренности »вашего класса, потому что код сервера будет по-прежнему компилироваться в MSIL (только вызовы методов будут удалены). Кроме того, 'ConditionalAttribute' довольно ограничен относительно того, где и как его можно применить: только методы и классы возвращаемого значения, полученные из' Attribute' – InBetween