| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Изменить версию Framework в проекте |
| Автор: HarpyWar 25.6.2007, 03:12 |
| Есть программа, написанная в VS2005 с установленным FM 2.0. В системе есть ещё 2 более ранних версий FM. Возможно ли в проекте изменить версию FM, например, на 1.0, и скомпилировать чтобы пользователь с этой версией смог запускать прогу? Просто у большинства юзеров установлен только первый фреймворк, вместе с системой, а второй качать 20 мб не каждому хочется из инета, чтобы запустить маленькую прогу. |
| Автор: -ser- 25.6.2007, 07:38 |
| добавь XML элемент в конфиг файл. либо <supportedRuntime>, либо <requiredRuntime> в зависимости от того что тебе нужно. это почти одно и то же, просто первый элемент не поддерживает 1.0. посмотри хелп студии на вышеупомянутые элементы, если будут вопросы <configuration> <startup> <supportedRuntime version="v1.1.4322"/> <!--<requiredRuntime version="v1.0.3705" safemode="true"/--> </startup> </configuration> |
| Автор: HarpyWar 25.6.2007, 12:21 | ||
В директории с проектом создаю App.config с содержимым
Но в папку /bin он не копируется после компиляции, и при запуске на компе с FM 1.1 все-равно требует версию 2.0... Или надо не так? |
| Автор: thomas 25.6.2007, 12:56 |
| HarpyWar, У меня примерно такая же проблема. Написал бизнес приложение для клиента на своей машине с FW 2.0 и FW 3.0 в VS 2005. Так на его машине запустить не смог, пока не установил FW2.0. В этом плане у юзеров MS похоже проблемы. Все что написано в новых версиях VS не работаем без соответствующих библиотек на машинах пользователей. А писать приложение в новой студии используя только старую версию FW я думаю не получиться. Вот такие грабли. И это многократно уже обсуждалось: типа как распространять приложение? --> ответ: ставить на машину пользователя соответствующий FW, либо заранее, либо при установке приложения. Тут хоть застрелись |
| Автор: tol05 25.6.2007, 18:09 |
| не уверен, что это можно сделать стандартными (не хакерскими Нагуглил вот что: http://alexey.raga.name/PermaLink,guid,42c99154-60ae-4b9a-91e9-e30efdc2844b.aspx http://blogs.gotdotnet.ru/personal/mihailik/PermaLink.aspx?guid=AEC5602B-1957-4DBE-BD47-4B3E736C6C0C |
| Автор: SilentNick 25.6.2007, 18:18 | ||
Сделай Add New Item и выбери там Application Configuration File. (Либо создавай xml файл в папке где лежит программа - WindowsApplication.exe.config). Правда вариант, предложенный -ser-'ом у меня не канает - вываливается ошибка Приложение создало исключение, которое не может быть обработано. |
| Автор: stab 25.6.2007, 18:35 | ||
оно и не удивительно, msil второй версии не совместим с первым фреймворком. компилировать надо именно компилером из первого фреймворка. файлы конфигрурации тут не помогут, они работают только при совместимости назад, но не добавляют совместимость вперёд. |
| Автор: HarpyWar 26.6.2007, 00:01 | ||
Добавил конфиг из VS, но всё-равно конечный файл не запускается... Пробовал из командной строки с помощью компилятора FM 1.1 - выходят ошибки. |
| Автор: stab 26.6.2007, 02:32 | ||
какие? |
| Автор: SilentNick 26.6.2007, 06:35 | ||||
Ну вообщем-то оно и понятно - глупо было предполагать, что с помощью одной строчки приложение, для работы которого необходим второй framework, будет прекрасно работать и с первым... А вот с компиляцией под определенную версию HarpyWar'у придется помучиться, поскольку если изначально приложение писалось под второй framework, там используется много того, чего в первом просто-напросто нету. Вот например простое консольное приложение:
Чтобы его скомпилить компилятором версии 1.1.4322 пришлось убрать ссылку на пространство имен System.Collections.Generic и вызов ReadKey(). Если проект достаточно крупный, но изменять придется довольно таки много (возможно даже придется отказаться от многих вещей, поскольку их нету в предыдущих версиях) |
| Автор: -ser- 26.6.2007, 12:13 |
| понятное дело, что ранние рантаймы ведать не ведают о том что случилось после них. и второе, если ты хочешь запускаться в первой версии, то и функциональность проги не должна превышать достижения первой. то есть, ты должен компилировать прогу используя все референсы в проекте на ранние dll, которые находятся в C:\WINDOWS\Microsoft.NET\Framework\vX.x.xxxx\ а конфиг файл говорит, если стоит 2.0, то запустимся под 2.0 или под той которой прикажете, (ты можешь указать приоритеты) но не ранней чем было скомпилировано. прочитай в хелпе студии - How to: Use an Application Configuration File to Target a .NET Framework Version (у меня локально следующая ссылка, возможно у каждого разная) ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_fxmigration/html/5247b307-89ca-417b-8dd0-e8f9bd2f4717.htm |
| Автор: HarpyWar 26.6.2007, 14:45 |
| С конфигурационным XML файлом такого содержания выходит только в C#, а на VB.NET не получается. Если выставить <requiredRuntime version="v1.0.3705" safemode="true"/>, то с более поздним FM такая прога не запустится, будет требовать именно v1.0 Попробовал простую VB программу откомпилировать через компилятор FM 1.1, выводит ошибки по всему проекту (во вложенном файле). Вообще, я так почитал, что вы пишете, и решил, что результат не стоит таких мучений, особенно редактирования кода для совместимости со старым FM. Ибо все-равно не у всех пользователей установлен даже FM 1.1, и качать новый все-равно придется. |
| Автор: -ser- 27.6.2007, 03:04 |
| да в конце-концов поставляй со своей прогой 2.0-й фреймворк. и не надо им будет качать его. в нете масса инфо как программно проверить какой фреймворк стоит на компе (если тебя нет рядом с клиентом). если ранняя версия, инсталлируй последний. все бесплатно и законно и проще чем гемор с конфигурацией. я сам повелся на вопрос как таковой. |
| Автор: Sanguine 29.6.2007, 17:15 |
| Ничего, вот выйдет скоро официальный Orcas, в него сразу эту функцию встроили - под какой Framework разрабатываешь... Он и И функционал по версии обрубает, и вообще все замечательно... И будем компилить хоть под 1.0, 1.1, 2.0, 3.0, или 3,5 без гемору. Скорее бы уже. |