|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Ситуация: На машине, где компилируется проект стоят: - C# express 2008 - MS Office 2003 - MS Office 2007 На машинах пользователей может стоять только MS Office 2003 под WinXP. В программе используется работа с Excel через Interop. Отсюда желание, чтобы программа использовала Interop именно под версию MS Office 2003. Проблема: Даже при указании подключения ссылки на Excel версии 2003, при запуске у пользователей программа ругается на невозможность загрузки Excel версии 2007. Обратил внимание, что свойство ссылки выглядит несколько странно (см. рисунок): данные, помеченные зеленым, относятся к версии 2003, а помеченные красным к 2007. Вопрос: Как можно (если можно) указать, что необходимо использовать именно 2003 версию? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 09:45 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Colt, Может наоборот? Пусть ищет сама наиболее подходящую версию? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 11:20 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Petro123, Так я разве же против? Вся засада в том (как я предполагаю), что на этапе компиляции принимается решение что самая подходящая версия 2007 и потом, уже у пользователя, прога требует именно 2007, а на имеющуюся в наличии 2003 версию слюной плюет. Вот мне и хочется знать, как еще при компиляции объяснить, что не надо зацикливаться на версии 2007. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 13:21 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Colt, спесифик версион = труе ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 13:38 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
buserColt, спесифик версион = труе Как понимаю, тогда ищется именно та что при разработке? А у него почему максимальная не работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 13:46 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Colt, OFF зачем тебе два офиса на машине для продакшена компиляции? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 13:51 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Colt, Лучше ручками писать загрузку. Я на stackoverflow находил пример. Заодно решается проблема выбора версии - какой Ексель есть, такой и запустится. В принципе, у себя на дев.машине снеси новый Эксель и поставь старый. Так привяжется жестко к 2003 версии. Только с другими работать не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 14:01 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
SiemarglТолько с другими работать не будет Не верю. В интерфейсах должно быть так же как с Net. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 14:08 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
buser, не совсем понял, что именно вы имели ввиду? Где именно этот самый "специфик", который можно выставить в "тру"? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 14:28 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Siemargl, вы имеете в виду позднее связывание? Если да, то действительно, это может решить проблему с жесткой прошивкой версии. Правда добавляется куча других проблем, присущих позднему связыванию, которых хотелось бы избежать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 14:30 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Coltчто на этапе компиляции принимается решение что самая подходящая версия 2007 На машине компиляции должна быть нижняя версия. Как в net supported Runtime. Тогда у клиента прицепит наиболее старшую. Проверьте. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 14:36 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Petro123Colt, OFF зачем тебе два офиса на машине для продакшена компиляции? Увы и ах, я работаю не в софтостроительной компании. Скорее это из раздела "а еще я немного программирую". Потому, с некоторых пор, office 2003 уже совсем перестал удовлетворять потребности, пришлось перейти на 2007. Раз уж пошла такая беседа дам немного своей истории. Когда у меня стоял только 2003, то прога запускалась без проблем на всех окружающих компах, даже включая те, на которых стоял 2007 (т.е. совместимость в эту сторону Interopt поддерживал). Когда меня обуяла гордыня и я снес 2003 поставив вместо него 2007, то (после перекомпиляции) прога стала ругаться на отсутствие библиотек от 2007 на машинах, где стоит только 2003. В качестве костыля я пока рядом с экзешником положил Microsoft.Office.Interop.Excel.dll, Microsoft.Vbe.Interop.dll и office.dll от 2007. Машины перестали ругаться и даже стали нормально (пока) работать. Но это сильно костыль, который мне не нравиться и вообще удивительно, что сработало. На текущий момент я пытаюсь понять как (если это возможно) имея на машине, где все компилиться, две версии офиса убедить c# пользоваться той, что помладше. (Это еще одна причина, почему у меня пока стоит два офиса). Но у меня такое ощущение, что нормального решения моей проблемы нет и единственный более-менее приемлемый выход - завести отдельную машину под компиляцию, где будет стоять только офис 2003 (а может и вовсе 2000), как и предлагали товарищи выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 14:44 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Petro123Coltчто на этапе компиляции принимается решение что самая подходящая версия 2007 На машине компиляции должна быть нижняя версия. Как в net supported Runtime. Тогда у клиента прицепит наиболее старшую. Проверьте. И я тоже так думал. Но, видимо, цепляние библиотек и цепляние СОМ-объектов (сорри, если коряво выразился) имеет между собой некоторые различия. Обратите внимание на рисунок из первого поста: там, при цеплянии, я указываю как раз младшую версию, причем явно, но уже в свойствах ссылки видно, что по факту цепляется dll от старшей версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 14:47 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
ColtОбратите внимание на рисунок из первого поста: там, при цеплянии, я указываю как раз младшую версию, причем явно, но уже в свойствах ссылки видно, что по факту цепляется dll от старшей версии. Т.е. механизм com тот же. Просто проверьте что я писал выше. Есть целевая среда, а есть среда компиляции. Вы же не проверили. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 15:14 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 17:00 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Petro123SiemarglТолько с другими работать не будет Не верю. В интерфейсах должно быть так же как с Net. В теории да. Но так получалось На дев-виртуалке у меня совсем никакого Excel-я нет. Так что грузилось ручками assembly.load, а с подменой что то не срабатывало. Уже подробности на память не воспроизведу - надо подымать версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2017, 00:31 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
SiemarglУже подробности на память не воспроизведу - надо подымать версии. Вот я поэтому и говорю автору в 15 раз проверить юзкейс. Мы не можем в IT ручками в динамике грузить офис. Либо MS настолько дурак. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2017, 07:19 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Petro123Мы не можем в IT ручками в динамике грузить офис. Либо MS настолько дурак. Если речь про com-interop враппер для офиса - еще как можем, т.к. это обычная дотнетовская сборка, для которых Assebly.LoadFrom никто не отменял.. И да, чтобы сборка нужной версии подцеплялась у клиента, нужно, чтобы она у него была. Поскольку в случае ТС при компиляции сборка враппера берется из ГАКа, и локально не копируется, то, если у клиента никогда не ночевало 2003-го офиса (вот как у меня сейчас, например) - откуда этой сборке взяться? Соответственно, поставить Copy Local=True, Embed Interop Types=False, и распространять сборку враппера нужной версии вместе с приложением. Ну, и про перенаправление версий, упомянутое выше, не забывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2017, 09:11 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Очень давно при работе с COM было так: Itemp = CreateCOMObject ("ADO"); Соответственно из реестра брался последний по версии объект. В данном сабже не так? Тогда нафига эта технология interopxxxxx? Я фигею. Это ведь дико неудобно? Откудя я знаю версию офиса у заказчика? Ен ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2017, 09:47 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Сон Веры Павловныесли у клиента никогда не ночевало 2003-го офиса (вот как у меня сейчас, например) - откуда этой сборке взяться? При поиске Net ведь работает? Есть вариант - загрузить максимальную. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2017, 09:54 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Petro123При поиске Net ведь работает? Есть вариант - загрузить максимальную. Что работает? Поиск сборки, которой никогда не было на компьютере? И что-то находится? И есть уверенность, что это именно та самая версия? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2017, 10:36 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныPetro123При поиске Net ведь работает? Есть вариант - загрузить максимальную. Что работает? Поиск сборки, которой никогда не было на компьютере? И что-то находится? И есть уверенность, что это именно та самая версия? Net проект скомпиленный у меня с net 4.5 не будет работать у зказчика с net 4.6? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2017, 11:15 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Атрибут version, sku в конфиге определяют общие версии Net напр. От 4 до 4.7. Логично предположить для офиса нечто подобное. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2017, 11:37 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Petro123Логично предположить для офиса нечто подобное. А мне - совсем нелогично: технология СОМ намного более старая, чем .Net, и давно уже не менялась. Ну, и еще я знаю, как загружаются и активируются COM-компоненты в .Net - всё по тем же CLSID, которые берутся либо из атрибутов интерфейсов PIA-сборки, либо из внедренных кусков PIA-сборки при выбранной опции Embed Interop Types=True. И в том, и в другом случае активация делается по CLSID, и никаких sku или чего-либо подобного там и в помине нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2017, 12:17 |
|
Как указать необходимую версию Microsoft.Office.Interop.Excel ?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Давай как потребители рассуждать. - с Net линейка версий работает? Да! - Это удобно? Да! Почему в офисе ВОЗМОЖНО не работает. Ждём теста автора топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2017, 13:17 |
|
|
start [/forum/topic.php?fid=20&fpage=36&tid=1399576]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 150ms |
0 / 0 |