Пользовательский инструмент Visual Studio для генерации кода ... как узнать, что происходит? - PullRequest
5 голосов
/ 20 октября 2011

Я пытаюсь создать пользовательский инструмент для генерации кода в Visual Studio 2010. Сначала я его регистрирую:

"$(FrameworkSDKDir)Bin\NETFX 4.0 Tools\gacutil.exe" /if "$(TargetPath)"

Затем я добавляю его через ключ reg:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\CLSID\{6A96476E-74F3-4AB3-9CCA-F15EC6104D84}]
"RuntimeVersion"="v4.0.30319"
"Class"="MapBuildTool.MapFileGenerator"
"Assembly"="MapBuildTool, Version=1.0.0.0, Culture=en-US, PublicKeyToken=7d8abca94a1e38ae"
"ThreadingModel"="Both"
"InprocServer32"="C:\\Windows\\SysWOW64\\mscoree.dll"
@="MapBuildTool"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Generators\{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}\MapBuildTool]
"CLSID"="{6A96476E-74F3-4AB3-9CCA-F15EC6104D84}"
"GeneratesDesignTimeSource"=dword:00000001
@="MapBuildTool"

А потом визуальная студия говорит:

Cannot find custom tool 'MapBuildTool' on this system.

ОК ... и что теперь? Разве он не нашел пользовательский ключ реестра? Он нашел ключ, но не смог загрузить сборку? Загрузилась ли сборка, но возникли проблемы с созданием класса ...? Какие журналы / места есть, где я могу посмотреть, что не так?

Ответы [ 3 ]

12 голосов
/ 08 августа 2013

Я столкнулся с этой проблемой с помощью специального инструмента, который я написал вчера. Чрезвычайно расстраивает. Файл reg был корректным, пользовательский инструмент отлично работал в Экспериментальном Улье. Но он просто отказался работать в обычном VisualStudio.

Я предполагаю, что VisualStudio читает реестр, а затем где-то кэширует части реестра.

Выполнение следующего, чтобы сбросить этот кеш

devenv /setup

После этого мой пользовательский инструмент работал отлично.

6 голосов
/ 27 февраля 2012

Для отладки:

Запустите Process Monitor для обратного инжиниринга кошмара загрузки сборок VS2010 / COM / .NET / Fusion и просмотра записей реестраваш VS выбирает и какие он пытается найти, но не с включенным NOTFOUND.

Надеемся исправить без необходимости отладки:

Опция 1:

Добавить обязательный путь:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\BindingPaths\<A new GUID>]
"<Path the the folder containing your DLL>"=""

Вариант 2:

Я не уверен в этом, но думаю, вы могли бы создатьправильный пакет VS2010 ( инструкции ), который позаботится о регистрации расположений исполняемых файлов.

Для обеих опций не требуются ни gacutil, tlbexp, ни regasm.VS2010 делает свое дело при поиске DLL.

0 голосов
/ 12 декабря 2011

Возможно, слишком поздно, но: Написание специального инструмента в VS.NET
Возможно, вы пропустили один из следующих шагов:

Зарегистрируйте ваш генератор для COM-взаимодействия

Вы должны сгенерировать GUID и использовать tlbexp.exe и regasm.exe. Я предполагаю, что вы должны использовать эти инструменты вместо помещения генератора в GAC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...