Решение ошибки MSB8011: Ошибка регистрации вывода
Странная ошибка:
Ошибка MSB8011: Ошибка регистрации вывода. Попробуйте включить пользователя Per-user Переназначить или зарегистрировать компонент из командной строки с помощью повышенные разрешения. C:\Program Файлы \MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets 744
Я получил эту ошибку при попытке использовать OpenSceneGraph (OSG) в элементе управления ActiveX. Поиск Google показал всевозможные решения, которые на самом деле не помогли решить проблему или не нашли точную причину ошибки, поэтому я хотел бы разместить решение в одном месте: здесь.
Я нашел решение для этого и вскоре отвечу на мой собственный вопрос, чтобы люди могли найти свое решение, если они столкнулись с одной и той же проблемой.
Ответы
Ответ 1
Эта ошибка возникает, когда Visual Studio (2010) не может найти зависимые файлы dll, необходимые программе для создания OCX. OCX создается в каталоге Debug проекта (для отладочных построек) и указывая "Рабочий каталог" (в настройках проекта) в качестве папки, в которой находится зависимая DLL, не поможет Visual Studio в поиске DLL.
Теперь уловка (это то, что делает головную боль для решения проблемы), что иногда, если Visual Studio не может создать OCX, вы не сможете запустить Dependency Walker в OCX. Поэтому вы никогда не узнаете, что недостающая DLL является проблемой.
Если вы знаете, какая DLL должна быть помещена в папку Debug, просто разместите их там, и ошибка исчезнет.
Если вы не знаете, и если ваш OCX не создан, перейдите к настройкам проектa > Linker > General > Register Output
и установите значение "Нет". Это создаст для вас OCX, но не будет проходить процесс регистрации, то есть когда ему нужны зависимые DLL.
Как только вы дважды щелкните OCX и Dependency Walker, вы увидите недостающую DLL с желтыми значками круга, просто поместите эти DLL в ту же папку, что и OCX, и ваша программа будет работать нормально. Это просто.
Ответ 2
Проблема может заключаться в том, что ваш проект пытается зарегистрировать COM-объект, но для этого недостаточно прав. В Windows 7 и 8 для regsvr32 требуются административные разрешения.
Что вы можете сделать, так это следующее. Создайте ярлык на рабочем столе C:\Windows\SysWOW64\cmd.exe(32-разрядная консоль). Щелкните правой кнопкой мыши, Свойства → Дополнительно → выберите Запуск от имени администратора. Запустите ярлык и убедитесь, что установлен User Access Control, и нажмите "Да". Начните строить из этого специального окна консоли.
Ответ 3
MSB8011, кажется, является общей ошибкой, возникающей всякий раз, когда regsvr32 сталкивается с проблемой. В моем случае regsvr32 вышел с кодом 4, когда для регистрации для каждого пользователя было установлено значение "Да", но DLL, которую я строил, не определяла точку входа DllInstall.
Ответ 4
Вы также можете сделать это через ID 2013 IDE, запустив эту среду IDE из ярлыка программных файлов, выберите Visual Studio 2010/2013, а затем щелкните правой кнопкой мыши и выберите "Запуск от имени администратора" после запуска IDE, затем откройте файл решения и создайте его, вы никогда не получите таких ошибок из-за регистрации regsrv32 DLL/COM
Ответ 5
На странице Property
перейдите к
Свойства конфигурации- > События сборки- > Событие после сборки
вы можете ссылаться на него как на /Service
. Могут быть изменены варианты, как показано ниже.
Перед изменением:
![Before modification]()
После модификации:
![After modification]()
Это помогло мне, надеюсь, что это тоже поможет.
Ответ 6
Я попытался использовать run как "Администратор" VS 2015, он смог решить проблему