Ориентация на .NET Framework 4.5 через Visual Studio 2010

169

Сегодня я установил .NET Framework 4.5 на своем компьютере, ожидая возможности использовать его из Visual Studio 2010, так как это всего лишь небольшое обновление, которое не должно создавать проблем для Visual Studio 2010. К сожалению, нет, даже вручную удаляя некоторые версии 4.0 и добавление соответствующих сборок 4.5 привело к тому, что исходные сборки 4.0 все еще упоминались в проекте.

Возможно ли нацеливаться на версию 4.5 из Visual Studio 2010 и если да, то как? Я бы очень хотел использовать ленты ...

Golvellius
источник
Необходимо обновить до Visual Studio 2012 для поддержки .NET v4.5.
Арран
Я узнал об этом ограничении, когда пытался использовать метод System.Threading.Tasks.Task.Run () в консольном приложении VS 2010. Этот метод не отображается в классе Task, если ваш проект нацелен на .Net Framework 4.0, и тогда вы понимаете, что VS2010 не может ориентироваться на .Net Framework 4.5, если хотите.
RBT

Ответы:

194

Каждая версия Visual Studio до Visual Studio 2010 связана с определенной платформой .NET. (VS2008 - это .NET 3.5, VS2005 - это .NET 2.0, VS2003 - это .NET1.1) Visual Studio 2010 и более поздние версии позволяют настраивать таргетинг на предыдущие версии платформы, но не могут использоваться в будущих выпусках. Вы должны использовать Visual Studio 2012 для использования .NET 4.5.

Брэд С
источник
9
Не совсем верно - .NET 3.0 был выпущен между версиями VS и мог использоваться в VS2005.
Хитрый Грифон
9
Что за загадка: перейти на vs2012 +, чтобы использовать тонкую версию .net 4.5 за счет потери любимого проекта установки vs2010 для развертывания установщиков MSI ... "обновление" больше похоже на побочный эффект ...
ecoe
6
@ecoe - есть расширение VS 2013, которое возвращает тип проекта Setup & Deployment: visualstudiogallery.msdn.microsoft.com/…
ajawad987
2
Это неверно Вам не нужно обновлять, чтобы использовать эту функцию. Все, что вам нужно сделать, это добавить новую ссылку, а затем перейти в папку .NET 4.5: C: \ Program Files (x86) \ Сборки ссылок \ Microsoft \ Framework \\. Net Framework \ 4.5. Вы найдете ссылку там. Просто добавьте это, и это работает
Гермес Трисмегист
2
@HermesTrismegistus в VS 2010 Я нажимаю «Target Framework = Установить другие фреймворки», и я перехожу на веб-сайт microsoft.com/net/download/visual-studio-sdks. Он не позволяет перейти к какой-либо папке. Что я должен делать. я должен быть в состоянии предназначаться для 4.5 от VS 2010. Tks.
Echeban
67

Есть довольно ограниченные сценарии, которые я могу придумать, где это было бы полезно, но давайте предположим, что вы не можете получить средства для покупки VS2012 или чего-то подобного. Если это так, и у вас есть Windows 7+ и VS 2010, вы можете использовать следующий взломанный мной хак, который, кажется, работает (но я еще не полностью развернул приложение, использующее этот метод).

  1. Сделайте резервную копию вашего файла проекта !!!

  2. Загрузите и установите Windows 8 SDK, который включает .NET 4.5 SDK.

  3. Откройте свой проект в VS2010.

  4. Создайте в своем проекте текстовый файл Compile_4_5_CSharp.targetsсо следующим содержимым. (Или просто загрузите его здесь - обязательно удалите расширение «.txt» из имени файла):

    <Project DefaultTargets="Build"
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    
        <!-- Change the target framework to 4.5 if using the ".NET 4.5" configuration -->
        <PropertyGroup Condition=" '$(Platform)' == '.NET 4.5' ">
            <DefineConstants Condition="'$(DefineConstants)'==''">
                TARGETTING_FX_4_5
            </DefineConstants>
            <DefineConstants Condition="'$(DefineConstants)'!='' and '$(DefineConstants)'!='TARGETTING_FX_4_5'">
                $(DefineConstants);TARGETTING_FX_4_5
            </DefineConstants>
            <PlatformTarget Condition="'$(PlatformTarget)'!=''"/>
            <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
        </PropertyGroup>
    
        <!-- Import the standard C# targets -->
        <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
    
        <!-- Add .NET 4.5 as an available platform -->
        <PropertyGroup>
           <AvailablePlatforms>$(AvailablePlatforms),.NET 4.5</AvailablePlatforms>
        </PropertyGroup>
    </Project>
    
  5. Выгрузите ваш проект (щелкните правой кнопкой мыши -> выгрузить).

  6. Отредактируйте файл проекта (щелкните правой кнопкой мыши -> Edit * .csproj).

  7. Внесите следующие изменения в файл проекта:

    а. Замените по умолчанию Microsoft.CSharp.targetsцелевой файл, созданный на шаге 4

    <!-- Old Import Entry -->
    <!-- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> -->
    
    <!-- New Import Entry -->
    <Import Project="Compile_4_5_CSharp.targets" />
    

    б. Измените платформу по умолчанию на.NET 4.5

    <!-- Old default platform entry -->
    <!-- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> -->
    
    <!-- New default platform entry -->
    <Platform Condition=" '$(Platform)' == '' ">.NET 4.5</Platform>
    

    с. Добавьте AnyCPUплатформу, чтобы разрешить таргетинг на другие платформы, как указано в свойствах проекта. Это должно быть добавлено перед первым <ItemGroup>тегом в файле

    <PropertyGroup Condition="'$(Platform)' == 'AnyCPU'">
        <PlatformTarget>AnyCPU</PlatformTarget>
    </PropertyGroup>
    
    .
    .
    .
    <ItemGroup>
    .
    .
    .
    
  8. Сохраните ваши изменения и закройте *.csprojфайл.

  9. Перезагрузите ваш проект (щелкните правой кнопкой мыши -> Обновить проект).

  10. В диспетчере конфигурации (Build -> Configuration Manager) убедитесь, что для вашего проекта выбрана платформа .NET 4.5.

  11. Еще в диспетчере конфигурации создайте новую платформу решений для «.NET 4.5» (вы можете основать ее на «любом процессоре») и убедитесь, что для решения выбрано «.NET 4.5».

  12. Создайте свой проект и проверьте на ошибки.

  13. Предполагая, что сборка завершена, вы можете убедиться, что вы действительно нацеливаетесь на 4.5, добавив ссылку на определенный класс 4.5 в ваш исходный код:

    using System;
    using System.Text;
    
    namespace testing
    {
        using net45check = System.Reflection.ReflectionContext;
    }
    
  14. При компиляции с использованием платформы .NET 4.5 сборка должна быть успешной. Когда вы компилируете под платформу «Любой процессор», вы должны получить ошибку компилятора:

    Error 6: The type or namespace name 'ReflectionContext' does not exist in
    the namespace 'System.Reflection' (are you missing an assembly reference?)
    
Дэвид Вудворд
источник
3
это круто, даже если бы это работало, будут ли элементы пользовательского интерфейса, такие как конструктор ленты, работать без массы xaml и других ошибок? просто обнови.
Анонимный тип
1
В дополнение к ответу Дэвида Вудворда я добавил: <OutputPath>bin\</OutputPath>к первой группе PropertyGroup, когда произошла следующая ошибка: свойство OutputPath не установлено для проекта «имя проекта».
mparkuk
Это действительно работает. Но я просто использую его, чтобы продолжить установку Moles на VS2010 после установки .NET Framework 4.5.1.
Конрад Кларк
1
Мне не удалось выяснить, как успешно выполнить шаг 11 «... создать новую платформу решения ...», но я обнаружил, что инструкции в целом были успешными, если шаг 11 игнорируется.
Тони Пулокас
8

К вашему сведению, если вы хотите создать пакет установщика в VS2010, к сожалению, он предназначен только для .NET 4. Чтобы обойти это, вы должны добавить NET 4.5 в качестве условия запуска.

Добавьте следующее в Условия запуска программы установки (щелкните правой кнопкой мыши, «Просмотр», «Условия запуска»).

В «Search Target Machine» щелкните правой кнопкой мыши и выберите «Добавить поиск в реестре».

Property: REGISTRYVALUE1
RegKey: Software\Microsoft\NET Framework Setup\NDP\v4\Full
Root: vsdrrHKLM
Value: Release

Добавить новое «Условие запуска»:

Condition: REGISTRYVALUE1>="#378389"
InstallUrl: http://www.microsoft.com/en-gb/download/details.aspx?id=30653
Message: Setup requires .NET Framework 4.5 to be installed.

Куда:

378389 = .NET Framework 4.5

378675 = .NET Framework 4.5.1, установленная с Windows 8.1

378758 = .NET Framework 4.5.1, установленная в Windows 8, Windows 7 SP1 или Windows Vista SP2

379893 = .NET Framework 4.5.2

Ссылка на условие запуска: http://msdn.microsoft.com/en-us/library/vstudio/xxyh2e6a(v=vs.100).aspx

cyberenergy
источник
3

Я боролся с интеграцией VS2010 / DNFW 4.5 и, наконец, получил эту работу. Начиная с VS 2008, был представлен кэш сборок, который используется Visual Studio и называется «Ссылочные сборки». Этот файловый кеш для VS 2010 находится по адресу \ Reference Assemblies \ Microsoft \ Framework.NetFramework \ v4.0. Visual Studio загружает сборки фреймворка из этого расположения, а не из каталога установки фреймворка. Когда Microsoft говорит, что VS 2010 не поддерживает DNFW 4.5, они имеют в виду , что этот каталог не обновляется при установке DNFW 4.5. Как только вы замените файлы в этом месте на обновленные файлы DNFW 4.5, вы обнаружите, что VS 2010 будет успешно работать с DNFW 4.5.

Капитан Насти
источник
0

Из другого поиска. Работал на меня!

«Вы можете использовать Visual Studio 2010, и он поддерживает его, если ваша ОС поддерживает .NET 4.5.

Щелкните правой кнопкой мыши по вашему решению, чтобы добавить ссылку (как вы делаете). Когда появится диалоговое окно, выберите «Обзор», а затем перейдите к следующей папке:

C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework \ .Net Framework \ 4.5

Вы найдете это там. "

Гермес Трисмегист
источник
6
В предложении «Вы найдете его там», что такое «это»? Какой файл в этой папке мы выбираем? Будет ли один из них нацелен на .net 4.5 в VS 2010?
Джефф Роу
Вы найдете сборки пространства имен. Вы можете добавить тот, который вы хотите. Например, мне нужно было использовать метод для работы с файлами ZIP. Поэтому я нашел DLL-файл "System.IO.Compression.dll" и добавил его в свой проект. Тогда я мог бы явно перечислить пространство имен в моем коде и использовать нужные мне методы.
Гермес Трисмегист
1
Это не работает для меня. Если вы удалите свою ссылку, скажем, на System, а затем перейдите к .Net 4.5 System.dll и добавите, что в качестве ссылки VS все еще выбирает ответ 4.0 System.dll Capt Nasty на этой странице для меня, например, копия System.dll из C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework \ .NETFramework \ v4.6 и поместите его поверх System.dll в C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework \ .NETFramework \ v4.0. Обратите внимание, что это противный хак и может иметь непредвиденные последствия.
Джинли