Я сделал домашнюю работу и, похоже, лучший подход к реализации отзыва заключается в использовании jti (id on Jtw) и черного списка отозванного идентификатора (который будет очищен, когда токен истёк). Это сделает JTW stateful только для части черного списка.
Проекты C++ (и решения) не (уже?) интегрированный в среде MSBuild. Как часть процесса сборки, называют задачу VCBuild, который является просто оберткой приблизительно vcbuild.exe .
Вы могли:
ACTIVATE=1
был бы определен, и компилировать его с devenv.exe (с переключатель/ProjectConfig). Примечание, что Ваше решение не работало бы на проекты C# также, если Вы не настроили свои файлы проекта немного. Для ссылки вот то, как я сделал бы это:
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
: <PropertyGroup Condition=" '$(MyConstants)' != '' "> <DefineConstants>$(DefineConstants);$(MyConstants)</DefineConstants> </PropertyGroup>
msbuild /p:MyConstants="ACTIVATE=1"
Это должно, вероятно, быть:
#ifdef ACTIVATE
# pragma message( "Activated" )
#else
# pragma message( "Not Activated")
#endif
Я должен был сделать, это также - должно было смочь создать две различных версии моего приложения и хотело смочь написать сценарий сборки с помощью VCBUILD. VCBUILD действительно имеет переключатель командной строки переопределения/, но я не уверен, что он может использоваться для изменения #define символов, которые могут затем быть протестированы с помощью #if условную компиляцию.
бегунок решения I с должен был записать простую утилиту для создания заголовочного файла, что #defined символ на основе состояния переменной среды и выполняют утилиту от шага перед сборкой. До каждого выполнения шага VCBUILD сценарий устанавливает переменную среды и "касается" файла в приложении, чтобы гарантировать, что шаг перед сборкой выполняется.
Да, это - ужасный взлом, но было лучше, чтобы я мог придумать!