VC ++ Visual Studio 2010 AssemblyName - PullRequest
       0

VC ++ Visual Studio 2010 AssemblyName

0 голосов
/ 21 февраля 2011

Я создаю автоматизированную систему сборки для группы проектов.Большинство из них C # и VB, но у нас есть несколько VC ++.Мне нужно извлечь свойства AssemblyName для всех проектов, прежде чем сборка начнет выполнять некоторые пользовательские вещи.Проекты C # и VB содержат элемент AssemblyName внутри файлов .csproj и .vbproj, и я могу получить их с помощью xml dom.В файле .vcxproj нет равных.Как выяснить, каким будет AssemblyName для проекта VC ++, просто взглянув на файл проекта (vcxproj) или файлы, включенные в проект?Компилятор просто использует любой файл, содержащий основную точку входа в качестве AssemblyName?

например, Win32ConsoleApp1.cpp -> Win32ConsoleApp1.exe?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2011

Спасибо, этих элементов не было в моем .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 и найти элемент . Если он там, используйте его; если нет, просто используйте имя файла проекта без расширения.

1 голос
/ 21 февраля 2011

Это на самом деле в файле .vcxproj, под заголовками <TargetName> и <TargetExt>.Настройки по умолчанию: $(ProjectName) и .exe (для приложения).На самом деле имя по умолчанию именуется на основе проекта, а не файла .cpp.

Однако, если пользователь изменит это (в ConfigurationProperties-> General), вы увидите в XMLчто-то вроде:

<TargetName>$(ProjectName)</TargetName>
<TargetExt>.exe</TargetExt>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...