#c# #visual-studio #preprocessor-directive
#c# #visual-studio #препроцессор-директива
Вопрос:
У меня есть приложение, для которого я хочу создать демонстрационную версию. Я предпочитаю предоставить другой exe-файл для моей платной версии и другой для демо, чтобы люди с демо-версией не могли взломать мою платную версию. На данный момент я прокомментировал код, который мне нужен в демо, поэтому всякий раз, когда мне нужно создать демо, я просматриваю эти комментарии и вношу необходимые изменения. Сегодня я понимаю директиву #if..
Теперь мой вопрос в том, есть ли у меня такой код
#if DEMO
public string test()
{
return "blabla";
}
#endif
и я не определил DEMO
директиву, поэтому мой код, очевидно, становится серым, и я не могу достичь этого метода, которого я ожидал до сих пор. Теперь я перестроил свой проект без определения DEMO
директивы, и я удалил свой файл .pdb из выходной папки, после чего я попытался проверить свой исполняемый файл с помощью dotpeek, и я не смог увидеть этот метод тестирования там.
Могу ли я использовать этот подход для разделения моих исполняемых файлов демонстрационной и платной версий? Допустим, этот test
метод является демонстрационным методом, поэтому его не будет видно в платной версии, если кто-то взломает его. И то же самое касается противоположного, если этот test
метод является методом платной версии, и я помещаю его внутрь, #if !DEMO
тогда, если я определю DEMO
и перестрою свой exe, я не увижу этот test
метод там, верно?
Как я упоминал ранее, я уже проверил код и не смог увидеть свои методы с помощью dotpeek, но я просто хочу быть на 100% уверен, что эти методы не будут видны в таких программах, как dotpeek или где-либо еще
Ответ №1:
Да, код полностью опущен, если символ не определен. Это может быть абсолютный мусорный код — компилятор полностью игнорирует его; он просто ищет конец (или #endif
или #else
).
Вопрос о том, соответствует ли это вашим потребностям для демо / платных версий, несколько отличается, но ответ с технической точки зрения «что включается в выходные данные» прост.
Комментарии:
1. Хорошо, спасибо, если есть другой хороший подход для разделения некоторых функций для моей демонстрации, я бы тоже хотел их знать. Мой подход к демонстрации может быть неправильным, но, по крайней мере, мой демонстрационный код всегда будет обновляться, и мне не придется перебирать сотни строк каждый раз, когда я захочу выпустить новую демонстрационную версию для своего приложения, все, что мне нужно сделать, это определить DEMO и перестроить свой код.
2. @ShinoLex: Вы должны придерживаться одного вопроса за сообщение — и если вы хотите спросить о том, как создать демо-версию, вам нужно будет включить действительно, очень конкретные требования, иначе он, вероятно, будет закрыт как слишком широкий.