Націлювання .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 і якщо так, то як? Я дуже хотів би використовувати стрічки ...


Ви повинні оновити до Visual Studio 2012 для підтримки .NET v4.5.
Арран

Мені стало відомо про це обмеження, коли я намагався використовувати метод System.Threading.Tasks.Task.Run () у консольній програмі VS 2010. Цей метод не відображається в класі завдань, якщо ваш проект орієнтований на .Net Framework 4.0 і тоді ви розумієте, що VS2010 не може націлити на.
RBT

Відповіді:


194

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


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) \ Reference Assemblies \ Microsoft \ Framework \\. Net Framework \ 4.5. Ви знайдете посилання там. Просто додайте його і це працює
Гермес Трисмегістус

2
@HermesTrismegistus у VS 2010 я натискаю "Target Framework = Встановити інші рамки", і це переносить мене на веб-сайт microsoft.com/net/download/visual-studio-sdks Це не дозволяє мені переходити до будь-якої папки. Що я повинен зробити. я повинен бути в змозі націлити 4.5 на VS 2010. Ткс.
Ечебан

67

Є досить обмежені сценарії, за якими я можу подумати, де це було б корисно, але припустимо, ви не можете отримати кошти на придбання VS2012 чи щось для цього. Якщо це так, і у вас є Windows 7+ та VS 2010, ви, можливо, зможете використовувати наступний хак, який я зібрав, який, здається, працює (але я ще не повністю розгорнув додаток, використовуючи цей метод).

  1. Створіть резервну копію файлу проекту !!!

  2. Завантажте та встановіть пакет SDK для Windows 8, який включає в себе .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. Відредагуйте файл проекту (клацніть правою кнопкою миші -> Редагувати * .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>
    

    c. Додайте 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 та інших помилок? srsly просто оновлення.
Анонімний тип

1
На додаток до відповіді Девіда Вудварда, я додав: <OutputPath>bin\</OutputPath>до першої PropertyGroup, коли сталася нижченаведена помилка: Властивість OutputPath не встановлена ​​для назви проекту "ім'я проекту".
mparkuk

Це справді працює. Але я просто використовую його, щоб я міг продовжувати працювати Moles на VS2010 після установки .NET Framework 4.5.1.
Конрад Кларк

1
Я не зміг зрозуміти, як успішно виконати етап 11, "... створити нову платформу рішення ...", але я виявив, що ці інструкції в цілому були успішними, якщо етап 11 ігнорується.
Тоні Пулокас

8

FYI, якщо ви хочете створити пакет встановлення у VS2010, на жаль, він націлений лише на .NET 4. Щоб вирішити це, вам потрібно додати NET 4.5 як умову запуску.

Додайте наступне в Умови запуску інсталятора (Клацніть правою кнопкою миші, Переглянути, Умови запуску).

У "Пошуковій машині пошуку" натисніть правою кнопкою миші та виберіть "Додати пошук у реєстрі".

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


3

Я боровся з інтеграцією VS2010 / DNFW 4.5 і, нарешті, почав це працювати. Починаючи з VS 2008 року, було введено кеш збірок, який використовується Visual Studio під назвою "Посилання на збори". Цей файловий кеш для VS 2010 розміщений за адресою \ Контрольні збори \ 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: \ програмні файли (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 Відповідь Насті Насті на цій сторінці працює для мене, наприклад, скопіюйте System.dll від C: \ Program Files (x86) \ Контрольні збори \ Microsoft \ Framework \ .NETFramework \ v4.6 та опустити його на System.dll у C: \ Program Files (x86) \ Reference Reference \ Microsoft \ Рамка \ .NETFramework \ v4.0. Зауважте, що це неприємний злом і може мати непередбачувані наслідки.
Jinlye
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.