Я бы также посоветовал помещать макросы в настройки проекта (файл csproj), как рекомендует @Hans Passant.
Если вам нужны определения документированных, вы можете добавить в документ файл документации, объясняющий, чтонастройки означают.
Если вариантов не слишком много, вы можете определить новую конфигурацию проекта для каждого.Это позволит вам предварительно настроить необходимый список #defines для каждого варианта, а затем просто переключаться между ними из выпадающего списка конфигурации на панели инструментов.Если вы хотите временно отключить один параметр, вы можете продублировать текущую конфигурацию и удалить #define, а затем удалить конфигурацию позже, когда вы ее протестировали.
Следующий вариант, который я могу предложить, чтобы сделать его "проще""(объединяя настройки и документы в один файл, как вы предложили), можно использовать простой текстовый файл (настройки + комментарии) для настройки проекта и потратить 15 минут на написание быстрого приложения на c # для чтения этого файла изапишите настройки, которые он содержит, в файл .csproj - это всего лишь XML, поэтому его следует написать тривиальным приложением.Вы сможете легко настроить этот файл и запустить приложение для обновления, чтобы изменить настройки проекта.Если это то, чем вы будете заниматься часто, потратьте 30 минут на это и добавьте пользовательский интерфейс с флажками для более удобного выбора настроек.
Концепция, которую вы описываете, звучит довольно странно.Смысл библиотеки обычно в том, что у вас есть один стандартизированный кусок кода, который может совместно использоваться многими клиентами, поэтому изменение такого рода определений для перенастройки всей библиотеки - это не то, что я ожидал бы делать очень часто,Возможно, у вас есть веские причины, но, возможно, стоит рассмотреть , почему вам нужно решить эту проблему #define.
(например, если у вас много клиентов, которым нужны разные варианты "библиотеки""лучший подход будет состоять в том, чтобы использовать конфигурации (описанные выше), чтобы позволить вам собрать все необходимые варианты в пакетной сборке. Если вы просто пробуете множество различных алгоритмов / методов, то можете ли вы перепроектировать куски библиотеки так, чтобы выможет ограничить влияние большинства #defines только одним файлом .cs, чтобы они больше не были глобальными? Возможно, библиотека не должна быть в одной dll, или нужна архитектура подключаемого модуля, чтобы вы могли выбиратьи выберите «модули», включенные в библиотеку)