Невозможно добавить пользовательское действие в проект установщика Visual Studio 2010 - PullRequest
7 голосов
/ 18 февраля 2011

Я преобразовал рабочий проект из Visual Studio 2008 в VS2010.Решение c ++ создает один исполняемый файл и 3 библиотеки DLL, а также проект установки Windows.

После преобразования в VS2010 я получил ошибку сборки "Невозможно создать настраиваемое действие с именем" Основной вывод из xxxx (Active) "из группы вывода проекта" Основной вывод ", поскольку в группе вывода проекта нет ключафайл. "

Я удалил и заново добавил группы вывода, затем попытался добавить пользовательское действие.Выполняемый вывод не был указан в качестве кандидата для настраиваемого действия.Затем я заметил, когда я выбрал свойства исполняемого файла «Основной вывод», что свойство «KeyOutput» было установлено на (Нет) и было серым.

При повторном посещении версии VS2008 свойство KeyOutput не было недоступно.Я обнаружил сообщение об ошибке в MSDN с бесполезным исправлением:

«Удалите настраиваемое действие и замените его настраиваемым действием, указывающим на группу вывода проекта, имеющую файл ключа.»

Очевидно, что технический писатель тоже не знал, как это исправить.Имейте в виду, оригинальная сборка сработала и установлена ​​правильно.Я считаю, что основная проблема заключается в том, почему свойство KeyOutput отключено - но почему?(При просмотре «Outputs» он правильно показывает exe или dll в каждом проекте)

Ответы [ 3 ]

3 голосов
/ 14 апреля 2011

У меня была похожая проблема, и я выяснил, почему в проекте установки не удалось найти ключевые файлы вывода.

Мой выходной каталог проекта был определен как $ (SolutionDir) \ bin \ $ (платформа). SolutionDir уже имеет обратную косую черту, поэтому \ bin помещает двойную обратную косую черту в путь. Проект будет работать нормально, но проект установки не сможет разрешить ключевые результаты. Установка вывода в $ (SolutionDir) bin \ $ (Platform) \ решила проблему.

2 голосов
/ 18 февраля 2011

После дальнейшего изучения я обнаружил, что это ошибка в Visual Studio 2010.

Если вы укажете выходное имя для проекта, которое отличается от имени самого проекта, он не сможет сделать правильную вещь.

Чтобы воспроизвести это, измените

Свойства проекта-> Linker-> General-> OutputFile из $ (OutDir) $ (TargetName) $ (TargetExt) на что-то вроде $ (OutDir)foobar.exe

Затем проект изменяет значение KeyOutput на пустое и становится недоступным для пользовательских действий в установках.Никакого обходного пути, кроме как по соглашению об именах проектов по умолчанию.

1 голос
/ 05 мая 2011

Очень поздний ответ, но, надеюсь, он спасет кого-то за 2 часа, которые я потратил, стуча головой об стену с VS 2010 (что за ужасная часть программного обеспечения - медленно загружается и занимает 300 мегабайт рабочей памяти на девенв,и теперь эта ошибка !!!!! ????) здесь идет - Роджер Данн был прав, говоря, что именно свойства проекта-> Linker-> General-> OutputFile вызывают проблему - если у вас есть что-то вроде $ (OutDir) foobar.exe пользовательское действие barfs, если вы измените его обратно на $ (OutDir) $ (TargetName) $ (TargetExt), оно снова заработает!

Обходной путь - изменить макрос $ (TargetName) на foobar, а затем использовать $ (OutDir) $ (TargetName) $ (TargetExt), если вы хотите использовать собственное имя для вашего exe.

$ (TargetName) можно изменить в - Свойства проекта-> Свойства конфигурации-> Общие-> TargetName.

Но что за пустая трата времени это VS 2010.

...