|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
Хочу все-таки попробовать найти способ универсального использования стандартных COM с ранним связыванием. Я тут обратил внимание на то что при позднем связывании скорость выполнения кода падает где-то в 2-3 раза (замерял на примере adodb, когда загружает таблицу БД прыгая по As Object вместо As Recordset). Плюс конечно подсказки при написании кода удобны. И прописывать интерфейс для событий как тут тренировался недавно - тоже жутко неудобно, да и не факт что в произвольном случае справлюсь. К теме вопроса. Создаю проект .Net 4.5 (VS2013), добавляю туда ссылку на COM (до этого ее никогда никуда не добавлял), я брал Microsoft Fax Service Extended COM Type Library Пишу одну строчку кода: Код: vbnet 1. 2.
Конвертирую проект в .Net2/Net3.5 Запускаю: авторДополнительные сведения: Ошибка при создании формы. См. Exception.InnerException. Ошибка: Невозможно загрузить файл или сборку "Interop.FAXCOMEXLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" или один из зависимых от них компонентов. Сборка создана в более поздней версии среды выполнения чем текущая, и не может быть загружена. И не помогает ничего, ни перекомпиляция, ни удаление подпапок в проекте, ни создание вообще нового проекта в .Net 2 и добавление туда этой COM "с нуля". И вот чего делать? Как эту "сборку" удалить теперь из системы? Ну чтоб хоть как-то запустить это теперь в Net 2/3.5 для начала. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2015, 19:19 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
Дмитрий77, Папки debug/bin чистил? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2015, 21:43 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
Точнее /obj/debug/, там создаётся интероп для COM ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2015, 21:49 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
VSVLAD, Да чистил все, чего только не пытался, даже если другой проект делать и сразу в .Net2 его мувать, а потом этот COM добавлять - то же самое. Вот похоже по теме. COM Interop problem when targeting .NET 2.0 on Visual Studio 2013 Visual Studio Express 2013 does not build COM interop dll's to the correct .net version. Bug reported to microsoft https://connect.microsoft.com/VisualStudio/feedback/details/837858/com-interop-problem-when-targeting-net-2-0-on-visual-studio-2013 Workaround until its fixed.... Install trial version of Visual Studio Ultimate 2013 at this link http://www.visualstudio.com/ This package correctly builds COM interops to the correct version of .net you target. Ну и че мне, крякнутую full studio искать? Просто по логике, не поверю что в древнем VB6 раннее связывание прекрасно работает и не глючит от системы к системе, а с современным .Net такая извините жопа, что надо только извращаться с поздним связыванием. Т.е. в рамках Net 4.0-4.5 оно все работает, а в рамках .Net 2.0-3.5 не хочет ну ни в какую, даже на данном компе где установлена студия. Причем ощущение, что просто тупо компилит неправильные обертки для COM. Что касается ADODB, то оно работает при конвертации в .Net2 (на данном компе с 8,1), но при переносе на XP все одно жопа с похожей ошибкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2015, 22:07 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
Короче согласно совету из поста качаю/ставлю пока VS2013 Ultimate, это конечно оригинально - 8ГБ студии качать ради решения таких проблем. Конфликта надеюсь с VS2013 EE не будет? посмотрю что это даст и насколько это решит общую проблему с ранним связыванием для стандартных COM, если даже и заведется. Гы. Если оно оправдано, то будем думать как энту полную студию "лицензировать". ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2015, 00:46 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
Ну VS2013 Ultimate установил, даже ключик нарыл. Теперь с любым COM компилируется и под .Net2 и под 2013EE и под 2013Ultimate. На данном 8.1 компе типа работает. Прогресс конечно... А стоит мувнуть на XP - и Error Report сразу. Пробовал с 3-мя разными COM: adodb, ie, fax ext. Пробовал даже ссылаться на COM на XP-компе. На 8.1 работает, на xp не хочет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2015, 03:29 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
О, доперло кажись. Добавив ссылки на этих троих, идем далее в Свойства -> Ссылки и проверяем/ставим Копировать локально=True. Тогда в папке с exe появляются гарантированно: ADODB.dll Interop.FAXCOMEXLib Interop.SHDocVw.dll При переносе на XP или куда там идем, берем эту дрянь с собой . Если так понимаю сильных противоречий с имеющимися на целевом компе original COM-ами не наблюдается, то оно заводится. Ну и этот баг идиотский в Express Studio, часа три эту Ultimate качал и еще час устанавливалась. Как минус при старте древней VB6 студии каждый начинанаются какие-то несанкционированные установки со стороны VS2013. Симптомы как здесь: 16501822 -только кормить приходится каждый раз, а не единожды. Помогло отключение местного редактора ресурсов, не уверен что это правильный путь. Теперь правда в обоих студиях (Express и Ultimate) компиляция COM-оберток корректно работает. Ставил в ту же папку как предложил установщик - начинка так понимаю одна, морды разные. Жизнь налаживается, можно и без позднего связывания обойтись. Вопросы: 1) обязательно эти Interop. с exe-шником таскать? Или м.б. есть какая опция, чтоб они в exe-шник встраивались? В C++ есть какие-то опции когда можно обычные dll в один exe-шник определить (с весомым увеличением размера последнего ясно дело). 2) Нельзя все-таки создать Interop чтоб он автоматом запрашивал последнюю версию COM -компонента? (в VB6 к его чести ссылки работают именно по этому принципу)? 3) Мне Ultimate студия что-то даст реальное сверх Express? Т.е. есть смысл делать проекты в ней а не в Express? Про редактор ресурсов слыхал, но VB.Net насколько я понимаю классических ресурсов же все одно не использует. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2015, 05:05 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
Дмитрий77, 1) есть костыль - ilmerge 2) будете смеяться - interop именно так и поступает, никакой мистики нет. Главное - чтоб нужная сборка подцепилась ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2015, 13:53 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
Изопропил1) есть костыль - ilmerge Попробовал. Вроде оно это делает. Но это не штатный инструмент, не подгадит ли в каких-то случаях? Не уверен, что стоит им пользоваться, м.б. проще таскать и класть в папку с прогой? И он работает с .Net2, но не с .Net 4.5. А в .Net 4.5 опция Внедрить типы взаимодействия=True разве не тоже самое делает? >>2) Нельзя все-таки создать Interop чтоб он автоматом запрашивал последнюю версию COM -компонента? (в VB6 к его чести ссылки работают именно по этому принципу)?Изопропил2) будете смеяться - interop именно так и поступает, никакой мистики нет. Главное - чтоб нужная сборка подцепилась Не, смеяться не буду и однажды я четко проверил что это не так. Вот здесь, начиная с этого поста 14935389 Смысл в том, что если указать ссылку на com "adodb v.2.6", то обертка будет вызываться именно v.2.6, а не более новая имеющаяся 2.8, как по логике бы хотелось. Не, ну хотя б разобрался, а)что надо делать, чтоб эти interop всегда генерились в папке с exe и б) с правилом что их надо таскать с exe чтоб все было OK на другом компе(ну или внедрять, в правильности этого сомневаюсь). Уже ясность появилась. >>>3) Мне Ultimate студия что-то даст реальное сверх Express? Т.е. есть смысл делать проекты в ней а не в Express? Пока что я только заметил, что в Ultimate при нажатии на Stop она ужасно долго думает. "Анализатор кода" никаких особо умных советов не дает, какие-то подсказки по поводу использования 4/8 битных указателей в API - не всегда оправданные и советы по поводу того в каких модулях API размещать - это мое личное дело, только бесит. С какого перепою она стоит 12кБаксов (если ее честно покупать)? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2015, 17:45 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
Дмитрий77, чёт не то ты про ADO говоришь typelib - разные, dll - одни и те же. Какой "логики" хочешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2015, 18:37 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
Изопропил, логика там была такая: в оригинальном VB6 был указан 2.6 но реально использовался 2.8 в .net "по аналогии" указал 2.6 и .net стал использовать ==2.6, "такой-же код" дал сбой, потому что в коде использовалась нечто что поддерживается в 2.8 но не поддерживается в 2.6 Нормально с adodb все решается. В .Net надо указывать ==2.8 (оно всегда есть на xp и выше, а версии ниже имеют глюки). Всякие 6.0/6.1 указывать нельзя, т.к. на XP их нет С другими COM что я использую таких гиморов вообще нет, проверил. Так что будем пока считать, что все хорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2015, 19:04 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
Дмитрий77в .net "по аналогии" указал 2.6 и .net стал использовать ==2.6, "такой-же код" дал сбой, потому что в коде использовалась нечто что поддерживается в 2.8 но не поддерживается в 2.6 и кто здесь злобный буратино? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2015, 19:21 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
ИзопропилДмитрий77в .net "по аналогии" указал 2.6 и .net стал использовать ==2.6, "такой-же код" дал сбой, потому что в коде использовалась нечто что поддерживается в 2.8 но не поддерживается в 2.6 и кто здесь злобный буратино? .Net канечно. Патаму что: использует то что прописали, т.е. 2.6, а не "последнюю версию COM доступную на данном компе". >>в коде использовалась нечто что поддерживается в 2.8 но не поддерживается в 2.6 ну, извините, когда впервые ставил галку 2.6 в VB6 лет много тому назад я не мог предугадать/не знал , что код который я потом писал работает за счет версии 2.8, а не 2.6 и только потому что VB6 автоматически использует максимальную 2.8 вместо указанной 2.6. Т.е. твое утверждение >>2) Нельзя все-таки создать Interop чтоб он автоматом запрашивал последнюю версию COM -компонента? >2) будете смеяться - interop именно так и поступает, неверно. Не поступает он так. Не будет он цеплять 2.8 если указано 2.6. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2015, 19:48 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
Дмитрий77.Net канечно. а по-моему топикстартер, нарушающий соглашения COM ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2015, 20:12 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
Изопропил нарушающий соглашения COM в чем соглашения и в чем нарушения? P.S. Я стараюсь использовать только те COM, которые гарантированно поставляются системой (гарантия работы на любом компе от XP и выше без доустановок чего-либо). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2015, 23:05 |
|
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
|
|||
---|---|---|---|
#18+
Дмитрий77, вопрос не в том, какие COM интерфейсы/классы используешь, а как ты это делаешь Дмитрий77в чем соглашения и в чем нарушения? запросил ADO 2.6 , а используешь как 2.8 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2015, 00:57 |
|
|
start [/forum/topic.php?fid=20&msg=38891503&tid=1401855]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 348ms |
total: | 479ms |
0 / 0 |