У меня есть проект vb.net, который использует XML-литерал для настройки панели навигации интерфейса пользователя.Код выглядит примерно так и работает уже много лет.
Private ReadOnly _actionTreeXml As XElement =
<nodes>
<node key="any" name="Top">
<node key="log" name="***LOGIN***" type="everybody"></node>
<node key="op" name="Home" ctrl="uiHomePage" type="mfg"></node>
<node key="barcode" name="Barcode Entry" ctrl="EditMfgEntry" type="mfg"></node>
<node key="wip" name="Work in Progress" ctrl="QueryWIP" type="mfg"></node>
<node key="readme" name="Version Info" type="everybody"></node>
</node>
</nodes>
Недавно мне нужно было две сборки проекта, которые немного отличаются (не хочу платить за библиотечный код для многих пользователей),Итак, у меня есть одна сборка, в которой я выбрал все инструменты пользовательского интерфейса, связанные со штрих-кодом.Это прекрасно работает везде, кроме XML-литералов, таких как
#if USE_BAR_CODE=1
<node key="barcode" name="Barcode Entry" ctrl="EditMfgEntry" type="mfg"> </node>
#end if
Если я установлю USE_BAR_CODE в 0, я все равно получу xml-литерал внутри блока #if, но везде в моем коде, где я # if'ed использовал обычный VBИсходный код не был скомпилирован.
Это наводит меня на мысль, что процесс компиляции обрабатывает литералы xml ДО операторов #if.Я что-то пропустил?