powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / MEF & SatisfyImportsOnce: FileLoadException
4 сообщений из 4, страница 1 из 1
MEF & SatisfyImportsOnce: FileLoadException
    #40023176
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понадобилось мне недавно дописать одно расширение для SSMS - начинал когда-то это делать для SSMS 2014, сейчас решил подогнать его под актуальную версию, т.е. SSMS 18.
Все расширения для Visual Studio, а следовательно, и для SSMS сделаны на основе, и активно используют внутри MEF. Однако для этих расширений дела с ним обстоят немного иначе, чем со своими собственными приложениями. В частности, свои компоненты приходится насильно впихивать в CompositionContainer, просто так их система не импортирует (при этом майкрософтовские индусы спрятали контейнер в такую глубокую ж, что вытаскивать его приходится рефлекшеном). После этого нужно ещё для ряда компонентов (уже не своих) вызвать SatisfyImportsOnce, чтобы они без рекомпозиции просто обновили свои импорты, и туда попали те компоненты, которые я закомпозил принудительно.
И вот для одного компонента студии этот вызов валится с такой вот ошибкой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
System.IO.FileLoadException: Could not load file or assembly 'Microsoft.AnalysisServices.DaxEditor.EditorExtensions,
   Version=15.2.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies.
   The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity,
   RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity,
   RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound,
   Boolean forIntrospection, Boolean suppressSecurityChecks)
   ..........
причём этот Microsoft.AnalysisServices.DaxEditor.EditorExtensions у меня не используется вообще. Видимо, он тоже импортирован в этот компонент, и при обновлении импортов делается попытка загрузить сборку.
Проверил и обновил все сборки в проекте до последней версии - без толку.
Посмотрел, как и какие сборки грузятся (fuslogw) - ну да, вызов вышеупомянутой сборки валится, расширенная информация такова:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\kittenscake\AppData\Local\Microsoft\SQL Server Management Studio\18.0_IsoShell\Ssms.exe.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Microsoft.AnalysisServices.DaxEditor.EditorExtensions, Version=15.2.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft SQL Server Management Studio 18/Common7/IDE/Microsoft.AnalysisServices.DaxEditor.EditorExtensions.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft SQL Server Management Studio 18/Common7/IDE/Microsoft.AnalysisServices.DaxEditor.EditorExtensions/Microsoft.AnalysisServices.DaxEditor.EditorExtensions.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft SQL Server Management Studio 18/Common7/IDE/Extensions/Application/Microsoft.AnalysisServices.DaxEditor.EditorExtensions.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Extensions\Application\Microsoft.AnalysisServices.DaxEditor.EditorExtensions.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Microsoft.AnalysisServices.DaxEditor.EditorExtensions, Version=15.16.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91
WRN: Comparing the assembly name resulted in the mismatch: Minor Version
ERR: The assembly reference did not match the assembly definition found.
ERR: Run-from-source setup phase failed with hr = 0x80131040.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

- т.е. нужна сборка версии 15.2, а нашлась только 15.16, и она не подходит.
Из-за этой ошибки не проходит обновление импортов где нужно (в реализации IViewTagAggregatorFactoryService), и расширение просто не работает.
Кто что посоветует?
SSMS 18.7.1, фреймворк 4.7.2.
...
Рейтинг: 0 / 0
MEF & SatisfyImportsOnce: FileLoadException
    #40023187
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не пробовал сам писать екстеншены к VS, но
Сон Веры Павловны
вытаскивать его приходится рефлекшеном
показывает, что ты явно делаешь что-то с непредсказуемыми последствиями.
...
Рейтинг: 0 / 0
MEF & SatisfyImportsOnce: FileLoadException
    #40023190
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Я не пробовал сам писать екстеншены к VS, но
Сон Веры Павловны
вытаскивать его приходится рефлекшеном
показывает, что ты явно делаешь что-то с непредсказуемыми последствиями.

А другого варианта просто нет - сборка расширения (по стандартному месту расположения аддонов) не находится ни в AssemblyCatalog, ни в DirectoryCatalog контейнера, и компоненты без насильного подсовывания просто никуда не попадут. И именно в случае SSMS (это не полноценная студия, а isolated shell) я не один так делаю.
Ну, и плюс - это всё прекрасно работало пару минорных версий SSMS тому назад. А в этой, видимо, как-то не так обновили сборки.
...
Рейтинг: 0 / 0
MEF & SatisfyImportsOnce: FileLoadException
    #40023244
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хозяйке на заметку: при возникновении подобных косяков очищать папку %LocalAppData%\Microsoft\SQL Server Management Studio\18.0_IsoShell\ComponentModelCache (или LocalAppData%\Microsoft\VidualStudio\<version>\ComponentModelCache в общем случае) - там в файлик Microsoft.VisualStudio.Default.cache видимо когда-то давно прописалась версия 15.2 той самой сборки, и не обновилась, поэтому при обновлении импортов и делалась попытка загрузить версию 15.2. Папку очистил, кэш обновился, всё заработало.
Всем спасибо.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / MEF & SatisfyImportsOnce: FileLoadException
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]