Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .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 с содержимым
Код

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup>
        <requiredRuntime version="v1.1.4322"/>
    </startup>
</configuration>


Но в папку /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, либо заранее, либо при установке приложения.

Тут хоть застрелись  smile  иначе никак.

Автор: stab 25.6.2007, 17:34
Цитата(HarpyWar @  25.6.2007,  07:12 Найти цитируемый пост)
Возможно ли в проекте изменить версию FM, например, на 1.0, и скомпилировать чтобы пользователь с этой версией смог запускать прогу?


если в проекте не используется ничего специфичного для fw 2.0 (что маловероятно), можно попробовать скомпилить его с помощью компилятора из более ранних версий. запусти билд проекта в студии (Ctrl+Shift+B или Shift+F6), в Output  выведится командная строка компилера:

Код

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /debug+ /debug:full /optimize- /out:obj\Debug\Project1.exe /target:exe Class1.cs


меняй все "v2.0.50727" на "v1.1.4322" и с командной строки компиль (Win+R, cmd). если повезёт, то всё ок будет. *держит пальцы крестиком*  smile 

Автор: tol05 25.6.2007, 18:09
не уверен, что это можно сделать стандартными (не хакерскими smile ) средствами. Если кто знает, распишите последовательность, лично мне пригодится smile
Нагуглил вот что:
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
Цитата(HarpyWar @ 25.6.2007,  12:21)
В директории с проектом создаю App.config с содержимым
...
Но в папку /bin он не копируется после компиляции, и при запуске на компе с FM 1.1 все-равно требует версию 2.0...
Или надо не так?

Сделай Add New Item и выбери там Application Configuration File. (Либо создавай xml файл в папке где лежит программа - WindowsApplication.exe.config).

Правда вариант, предложенный -ser-'ом у меня не канает - вываливается ошибка Приложение создало исключение, которое не может быть обработано.

Автор: stab 25.6.2007, 18:35
Цитата(SilentNick @  25.6.2007,  22:18 Найти цитируемый пост)
вываливается ошибка Приложение создало исключение, которое не может быть обработано. 


оно и не удивительно, msil второй версии не совместим с первым фреймворком. компилировать надо именно компилером из первого фреймворка. файлы конфигрурации тут не помогут, они работают только при совместимости назад, но не добавляют совместимость вперёд.

Автор: HarpyWar 26.6.2007, 00:01
Цитата(SilentNick @ 25.6.2007,  18:18)
Сделай Add New Item и выбери там Application Configuration File. (Либо создавай xml файл в папке где лежит программа - WindowsApplication.exe.config).

Правда вариант, предложенный -ser-'ом у меня не канает - вываливается ошибка Приложение создало исключение, которое не может быть обработано.

Добавил конфиг из VS, но всё-равно конечный файл не запускается...

Пробовал из командной строки с помощью компилятора FM 1.1 - выходят ошибки. 

Автор: stab 26.6.2007, 02:32
Цитата(HarpyWar @  26.6.2007,  04:01 Найти цитируемый пост)
Пробовал из командной строки с помощью компилятора FM 1.1 - выходят ошибки.  


какие?

Автор: SilentNick 26.6.2007, 06:35
Цитата(cully @ 25.6.2007,  18:35)
оно и не удивительно, msil второй версии не совместим с первым фреймворком.

Ну вообщем-то оно и понятно - глупо было предполагать, что с помощью одной строчки приложение, для работы которого необходим второй framework, будет прекрасно работать и с первым...

А вот с компиляцией под определенную версию HarpyWar'у придется помучиться, поскольку если изначально приложение писалось под второй framework, там используется много того, чего в первом просто-напросто нету.
Вот например простое консольное приложение:
Код

using System;
using System.Collections.Generic;
using System.Text;

namespace TestApp
{
    class Program
    {
        static void Main(string[] args)
        {            
            Console.Write("Версия .Net Framework: " + Environment.Version.ToString());
            Console.ReadKey();
        }
    }
}

Чтобы его скомпилить компилятором версии 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 без гемору. Скорее бы уже. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)