powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
16 сообщений из 16, страница 1 из 1
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891044
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу все-таки попробовать найти способ универсального использования стандартных COM с ранним связыванием.
Я тут обратил внимание на то что при позднем связывании скорость выполнения кода падает где-то в 2-3 раза (замерял на примере adodb, когда загружает таблицу БД прыгая по As Object вместо As Recordset).
Плюс конечно подсказки при написании кода удобны.
И прописывать интерфейс для событий как тут тренировался недавно - тоже жутко неудобно, да и не факт что в произвольном случае справлюсь.

К теме вопроса.
Создаю проект .Net 4.5 (VS2013), добавляю туда ссылку на COM (до этого ее никогда никуда не добавлял), я брал Microsoft Fax Service Extended COM Type Library
Пишу одну строчку кода:
Код: vbnet
1.
2.
Public Class Form1
  Dim WithEvents faxserver As New FAXCOMEXLib.FaxServer


Конвертирую проект в .Net2/Net3.5
Запускаю:
авторДополнительные сведения: Ошибка при создании формы. См. Exception.InnerException. Ошибка: Невозможно загрузить файл или сборку "Interop.FAXCOMEXLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" или один из зависимых от них компонентов. Сборка создана в более поздней версии среды выполнения чем текущая, и не может быть загружена.
И не помогает ничего, ни перекомпиляция, ни удаление подпапок в проекте, ни создание вообще нового проекта в .Net 2 и добавление туда этой COM "с нуля".

И вот чего делать? Как эту "сборку" удалить теперь из системы? Ну чтоб хоть как-то запустить это теперь в Net 2/3.5 для начала.
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891133
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Папки debug/bin чистил?
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891139
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее /obj/debug/, там создаётся интероп для COM
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891149
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 все одно жопа с похожей ошибкой.
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891199
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче согласно совету из поста качаю/ставлю пока VS2013 Ultimate,
это конечно оригинально - 8ГБ студии качать ради решения таких проблем.
Конфликта надеюсь с VS2013 EE не будет?

посмотрю что это даст и насколько это решит общую проблему с ранним связыванием для стандартных COM, если даже и заведется.

Гы. Если оно оправдано, то будем думать как энту полную студию "лицензировать".
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891226
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну VS2013 Ultimate установил, даже ключик нарыл.
Теперь с любым COM компилируется и под .Net2 и под 2013EE и под 2013Ultimate. На данном 8.1 компе типа работает. Прогресс конечно...

А стоит мувнуть на XP - и Error Report сразу.
Пробовал с 3-мя разными COM: adodb, ie, fax ext. Пробовал даже ссылаться на COM на XP-компе. На 8.1 работает, на xp не хочет.
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891232
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, доперло кажись.
Добавив ссылки на этих троих,
идем далее в
Свойства -> Ссылки
и проверяем/ставим Копировать локально=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 насколько я понимаю классических ресурсов же все одно не использует.
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891311
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

1) есть костыль - ilmerge
2) будете смеяться - interop именно так и поступает, никакой мистики нет. Главное - чтоб нужная сборка подцепилась
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891392
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил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кБаксов (если ее честно покупать)?
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891408
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

чёт не то ты про ADO говоришь

typelib - разные, dll - одни и те же. Какой "логики" хочешь?
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891420
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

логика там была такая:
в оригинальном 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 что я использую таких гиморов вообще нет, проверил.

Так что будем пока считать, что все хорошо.
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891427
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77в .net "по аналогии" указал 2.6 и .net стал использовать ==2.6, "такой-же код" дал сбой, потому что в коде использовалась нечто что поддерживается в 2.8 но не поддерживается в 2.6

и кто здесь злобный буратино?
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891438
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилДмитрий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.
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891448
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77.Net канечно.
а по-моему топикстартер, нарушающий соглашения COM
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891503
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил нарушающий соглашения COM
в чем соглашения и в чем нарушения?
P.S. Я стараюсь использовать только те COM, которые гарантированно поставляются системой (гарантия работы на любом компе от XP и выше без доустановок чего-либо).
...
Рейтинг: 0 / 0
Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
    #38891543
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

вопрос не в том, какие COM интерфейсы/классы используешь, а как ты это делаешь


Дмитрий77в чем соглашения и в чем нарушения?
запросил ADO 2.6 , а используешь как 2.8
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сборка создана в более поздней версии среды выполнения чем текущая -как бодаться
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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