Спасибо, этих элементов не было в моем .vcxproj. Возможно, у вас есть более старый .vcproj? В любом случае это привело меня к поиску в файле Microsoft.Cpp.props, который импортируется в каждый файл .vcxproj. В ней есть следующая строка:
$ (ProjectName)
Это плохо для моей цели - получить имя сборки, которая в конечном итоге будет сгенерирована, поскольку значение $ (ProjectName) расширяется во время выполнения. Поэтому я начал отслеживать, где установлено ProjectName. Он находится в Microsoft.Common.targets и имеет значение $ (MSBuildProjectName). Опять бесполезно для меня, потому что это тоже расширяется во время выполнения. Затем мне пришлось разобрать MSBuild.exe, его зависимые компоненты, и, наконец, я обнаружил, что класс Microsoft.Build.Evaluation.Evaluator был установлен как MSBuildProjectName. Это просто имя файла проекта без расширения. Например. MyConsoleApp1.vcxproj -> MyConsoleApp1.
Я также провел некоторые эксперименты и, просто щелкнув правой кнопкой мыши мой проект VC ++ в Visual Studio и выбрав «переименовать» и сохранив проект, добавляется новый элемент в файл проекта с именем с новым введенным мной значением. Исходя из всего этого, логика, с которой я работаю, состоит в том, чтобы проанализировать файл .vcxproj и найти элемент . Если он там, используйте его; если нет, просто используйте имя файла проекта без расширения.