Референс на более высокую версию платформы из проекта 2.0

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Референс на более высокую версию платформы из проекта 2.0

Сообщение xenomorph » 02.09.2012 (Вс) 13:40

Всем привет!

Проблема:

Есть солюшен с проектами на вб:
1. первый (основной) с dot net frx 2.0 (win executable)
2. второй с dot net frx 4.0 (assembly)
--
При подключении второго к первому появляется предупреждение о несовместимости платформ, и т.д. и. т.п.

Предвидя рекомендации менять платформу - ответ "нет".
Второй прож содержит "ForEach.Parrallel" - поэтому никак.

"Какой смысл?" - либа проверяет версию дот нета, и если она выше 4.0 -
использует параллелизацию, если ниже - то не использует.

Ситуация вроде бы стандартная - решение описано тут:

http://stackoverflow.com/questions/3298 ... rk-version
https://connect.microsoft.com/VisualStu ... et-project

-----------------------
17 down vote accepted

Step1: Unload the referencing project targeting .NET 2.0
Step2: Right click the unloaded project and select edit from context menu
Step3: Add <SpecificVersion>true</SpecificVersion> to the reference. Below is a sample from my repro solution:

<ProjectReference Include="..\HighFX\HighFX.csproj">
<Project>{8DD71CAF-BEF7-40ED-9DD0-25033CD8009D}</Project>
<Name>HighFX</Name>
<SpecificVersion>true</SpecificVersion>
</ProjectReference>

Step4: Reload the project.

Now your should be able to build within the Visual Studio 2010, there could still be a warning as below, but the build can be successful.
Source: http://social.msdn.microsoft.com/Forums ... 1c6ae00836
-----------------------


У меня не заработало на вб :-(. То есть вставил <SpecificVersion>true</SpecificVersion> во второй прож - а оно не компиляется (.
Есть идеи?
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Референс на более высокую версию платформы из проекта 2.

Сообщение Хакер » 02.09.2012 (Вс) 15:49

Я переношу.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Референс на более высокую версию платформы из проекта 2.

Сообщение FireFenix » 02.09.2012 (Вс) 15:56

Где вопрос?
И в чём прикол такой "параллелизации", если она работает только в одной версии?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Re: Референс на более высокую версию платформы из проекта 2.

Сообщение xenomorph » 02.09.2012 (Вс) 21:55

FireFenix писал(а):Где вопрос?
И в чём прикол такой "параллелизации", если она работает только в одной версии?


Спасибо за интерес!

Вопрос конкретизировано: "Как сделать так, чтоб в солюшене где стартовый проект на 2.0, зареференсить
проект который сделан так, что он параллелизирует выполнение кода ЕСЛИ он запущен под 4.0 и выше ИЛИ
если он видит, что запущен ДО 4.0, то использует последовательный код, вместо параллельного".

Код:

Код: Выделить всё
'== parrallel code =======================================================================>
        'sw.Restart()
        'dot net frx 2.0:
        Dim s_sv As String = System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion()
        GoTo Force20dotNetFrx
        If s_sv.StartsWith("v4") Then
            '--> run parrallel code:
            Parallel.ForEach(lst_Cells, Sub(cl)
                                            'cl = cluster list
                                            _mergeClustersNoDDF(gd.cls_Criticals.i_1ClusteringDistance, cl)
                                            '
                                            _mergeClusters(gd.cls_Criticals.i_2ClusteringDistance, cl)
                                        End Sub)
            <-- run parrallel code:
        Else
Force20dotNetFrx:
            '--> run squential code:
            For Each cl In lst_Cells
                _mergeClustersNoDDF(gd.cls_Criticals.i_1ClusteringDistance, cl)
                '
                '_mergeClusters(gd.cls_Criticals.i_2ClusteringDistance, cl)
            Next
            '<-- run squential code:
        End If
        '
        '-->
        'Debug.Print("parallel cluster merge: = " & sw.ElapsedMilliseconds.ToString)
        'sw.Restart()
        '
        '=========================================================================================>
        'aggregate all clusters from cells after parrallell processing:


Сакральный смысл вот в чём -
это часть распространяемой программы и тащить 4.0 явно не хочется - поэтому хочу универсально -
чтоб подключалось и работало в проекте под 2.0. Оно само определяет когда можно выполнять паралелизацию
средствами 4.0.

Уточню - это распараллеливание по физическим и виртуальным _ядрам_ ЦПУ.

Бенчмарк показал прирост производительности в 9.2 раза. Код специально собран для такого распаралеливания.
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Re: Референс на более высокую версию платформы из проекта 2.

Сообщение xenomorph » 02.09.2012 (Вс) 21:58

Решение - иметь 2 либы под разные версии и основную программу тоже под 2 версии -
но это вообще не ейс!

Тем более эти ограничения и ворнинги от вижуал студии - они чисто информативно блокирующие (инфа из линков выше)
--
И походу вопрос интересный и неоднозначный - могли бы и не переносить :alien:
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Референс на более высокую версию платформы из проекта 2.

Сообщение FireFenix » 03.09.2012 (Пн) 7:41

Framework versions 2, 3.0, 3.5 run on CLR version 2, while framework version 4 runs on CLR version 4: the version 2 CLR would not load an assembly that states it requires CLR 4

Т.к. версии исполняемой среды разные, то подключить к 2.0 библиотеки версии 4.0 напрямую незя.
У микрософт есть фитча Side-By-Side но я без понятия как довести до рабочего конца. Статья здесь и здесь

xenomorph писал(а):Сакральный смысл вот в чём -
это часть распространяемой программы и тащить 4.0 явно не хочется - поэтому хочу универсально -
чтоб подключалось и работало в проекте под 2.0. Оно само определяет когда можно выполнять паралелизацию
средствами 4.0.

А то что разные версии подключаемых системных библиотек и тонны конфликтов ты не учёл.
Более того, зачем делать проект, который только в одном случае работает быстрее? Не ужели сложно убрать параллелизацию или если приспичило - сделать её своими руками на v2.0?

Более того, .NET FW 2.0 морально устарел, и если кто-то использует .NET FW для сторонних программ, то не ниже v3.5

И в чём проблема сразу использовать целевую версию 4.0 фреймворка?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Re: Референс на более высокую версию платформы из проекта 2.

Сообщение xenomorph » 06.09.2012 (Чт) 1:06

Спасибо! Пока копаю.
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Референс на более высокую версию платформы из проекта 2.

Сообщение ger_kar » 18.09.2012 (Вт) 7:28

FireFenix писал(а):Более того, .NET FW 2.0 морально устарел, и если кто-то использует .NET FW для сторонних программ, то не ниже v3.5
Ну у многих такой стоит в отличии от 4 например. В MSDN уже VS2012 мелькает, для него что уже .NET FW 5 нужен?
Последний раз редактировалось ger_kar 18.09.2012 (Вт) 19:15, всего редактировалось 1 раз.
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 18.09.2012 (Вт) 18:38

ger_kar писал(а):В MSDN уже VS2012 мелькает, по него что уже .NET FW 5 нужен?

(.NET 4.5) & (Windows 7)+
:(


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 12

    TopList  
cron