Menargetkan .NET Framework 4.5 melalui Visual Studio 2010

169

Hari ini saya menginstal .NET Framework 4.5 di mesin saya berharap dapat menggunakannya dari Visual Studio 2010, karena itu hanya pembaruan kecil yang seharusnya tidak menimbulkan masalah untuk Visual Studio 2010. Sayangnya saya tidak, bahkan secara manual menghapus 4.0 tertentu dan menambahkan 4,5 majelis yang sesuai menghasilkan 4.0 majelis asli masih dirujuk dalam proyek.

Apakah mungkin untuk menargetkan versi 4.5 dari Visual Studio 2010 dan jika ya, bagaimana? Saya benar-benar ingin menggunakan pita ...

Golvellius
sumber
Anda harus meningkatkan ke Visual Studio 2012 untuk dukungan .NET v4.5.
Arran
Saya mengetahui batasan ini ketika saya mencoba menggunakan metode System.Threading.Tasks.Task.Run () di aplikasi konsol VS 2010. Metode ini tidak muncul di kelas Tugas jika proyek Anda menargetkan .Net framework 4.0 dan kemudian Anda menyadari bahwa VS2010 tidak dapat menargetkan .Net framework 4.5 jika Anda mau.
RBT

Jawaban:

194

Setiap versi Visual Studio sebelum Visual Studio 2010 terkait dengan kerangka kerja .NET tertentu. (VS2008 adalah .NET 3.5, VS2005 adalah .NET 2.0, VS2003 adalah .NET1.1) Visual Studio 2010 dan seterusnya memungkinkan penargetan versi kerangka kerja sebelumnya tetapi tidak dapat digunakan untuk rilis di masa mendatang. Anda harus menggunakan Visual Studio 2012 untuk memanfaatkan .NET 4.5.

Brad S
sumber
9
Tidak sepenuhnya benar - .NET 3.0 dirilis antara versi VS, dan dapat digunakan dalam VS2005.
Sly Gryphon
9
Apa teka-teki: bermigrasi ke vs2012 + untuk memanfaatkan keramahan .net 4.5 dengan biaya kehilangan Proyek Pengaturan vs2010 yang dicintai untuk menggunakan installer msi ... "peningkatan" terasa lebih seperti sidegrade ...
ecoe
6
@ecoe - Ada ekstensi VS 2013 yang membawa kembali jenis proyek Pengaturan & Penempatan: visualstudiogallery.msdn.microsoft.com/…
ajawad987
2
Ini salah. Anda tidak perlu memutakhirkan untuk menggunakan fitur ini. Yang perlu Anda lakukan adalah menambahkan referensi baru, lalu browse ke folder .NET 4.5: C: \ Program Files (x86) \ Assemblies Referensi \ Microsoft \ Framework \\. Net Framework \ 4.5. Anda akan menemukan referensi di sana. Cukup tambahkan dan berfungsi
Hermes Trismegistus
2
@ HermesTrismegistus di VS 2010 Saya klik "Target Framework = Instal Frameworks Lain" dan itu membawa saya ke situs web microsoft.com/net/download/visual-studio-sdks. Itu tidak memungkinkan saya menavigasi ke folder apa pun. Apa yang harus saya lakukan. saya harus dapat menargetkan 4,5 dari VS 2010. Tks.
Echeban
67

Ada beberapa skenario yang sangat terbatas yang dapat saya pikirkan di mana ini akan berguna, tetapi mari kita asumsikan Anda tidak bisa mendapatkan dana untuk membeli VS2012 atau sesuatu untuk efek itu. Jika itu yang terjadi dan Anda memiliki Windows 7+ dan VS 2010, Anda mungkin dapat menggunakan retasan berikut yang saya kumpulkan yang tampaknya berfungsi (tapi saya belum sepenuhnya menggunakan aplikasi menggunakan metode ini).

  1. Cadangkan file proyek Anda !!!

  2. Unduh dan instal Windows 8 SDK yang mencakup .NET 4.5 SDK.

  3. Buka proyek Anda di VS2010.

  4. Buat file teks di proyek Anda bernama Compile_4_5_CSharp.targetsdengan konten berikut. (Atau cukup unduh di sini - Pastikan untuk menghapus ekstensi ".txt" dari nama file):

    <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. Bongkar proyek Anda (klik kanan -> bongkar).

  6. Edit file proyek (klik kanan -> Edit * .csproj).

  7. Buat perubahan berikut dalam file proyek:

    Sebuah. Ganti default Microsoft.CSharp.targetsdengan file target yang dibuat pada langkah 4

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

    b. Ubah platform default menjadi.NET 4.5

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

    c. Tambahkan AnyCPUplatform untuk memungkinkan penargetan kerangka kerja lain seperti yang ditentukan dalam properti proyek. Ini harus ditambahkan tepat sebelum <ItemGroup>tag pertama dalam file

    <PropertyGroup Condition="'$(Platform)' == 'AnyCPU'">
        <PlatformTarget>AnyCPU</PlatformTarget>
    </PropertyGroup>
    
    .
    .
    .
    <ItemGroup>
    .
    .
    .
    
  8. Simpan perubahan Anda dan tutup *.csprojfile.

  9. Muat ulang proyek Anda (klik kanan -> Muat Ulang Proyek).

  10. Di manajer konfigurasi (Bangun -> Pengelola Konfigurasi) pastikan platform ".NET 4.5" dipilih untuk proyek Anda.

  11. Masih di manajer konfigurasi, buat platform solusi baru untuk ".NET 4.5" (Anda dapat mendasarkannya dari "Any CPU") dan pastikan ".NET 4.5" dipilih untuk solusinya.

  12. Bangun proyek Anda dan periksa kesalahannya.

  13. Dengan asumsi build selesai Anda dapat memverifikasi bahwa Anda memang menargetkan 4.5 dengan menambahkan referensi ke kelas 4.5 khusus untuk kode sumber Anda:

    using System;
    using System.Text;
    
    namespace testing
    {
        using net45check = System.Reflection.ReflectionContext;
    }
    
  14. Saat Anda mengompilasi menggunakan platform ".NET 4.5", build seharusnya berhasil. Ketika Anda mengkompilasi di bawah platform "Any CPU" Anda harus mendapatkan kesalahan kompiler:

    Error 6: The type or namespace name 'ReflectionContext' does not exist in
    the namespace 'System.Reflection' (are you missing an assembly reference?)
    
David Woodward
sumber
3
ini krazy, bahkan jika itu berhasil, akankah elemen UI seperti desainer pita bekerja tanpa massa xaml dan kesalahan lainnya? srsly cukup tingkatkan.
Jenis Anonim
1
Selain jawaban David Woodward, saya menambahkan: <OutputPath>bin\</OutputPath>ke PropertyGroup pertama, ketika kesalahan di bawah ini terjadi: Properti OutputPath tidak disetel untuk 'nama proyek' proyek.
mparkuk
Ini memang berhasil. Tapi saya hanya menggunakannya agar saya bisa terus menjalankan Moles di VS2010 setelah menginstal .NET Framework 4.5.1.
Conrad Clark
1
Saya tidak dapat menemukan cara untuk berhasil melakukan langkah 11, "... buat platform solusi baru ...", tetapi saya menemukan bahwa instruksi tersebut berhasil secara keseluruhan jika langkah 11 diabaikan.
Tony Pulokas
8

FYI, jika Anda ingin membuat paket Installer di VS2010, sayangnya hanya menargetkan .NET 4. Untuk mengatasi hal ini, Anda harus menambahkan NET 4.5 sebagai syarat peluncuran.

Tambahkan hal-hal berikut ke dalam Kondisi Peluncuran penginstal (Klik kanan, Lihat, Kondisi Peluncuran).

Di "Search Target Machine", klik kanan dan pilih "Add Registry Search".

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

Tambahkan "Kondisi Peluncuran" baru:

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.

Dimana:

378389 = .NET Framework 4.5

378675 = .NET Framework 4.5.1 diinstal dengan Windows 8.1

378758 = .NET Framework 4.5.1 diinstal pada Windows 8, Windows 7 SP1, atau Windows Vista SP2

379893 = .NET Framework 4.5.2

Referensi kondisi peluncuran: http://msdn.microsoft.com/en-us/library/vstudio/xxyh2e6a(v=vs.100).aspx

cyberenergy
sumber
3

Saya telah berjuang dengan integrasi VS2010 / DNFW 4.5 dan akhirnya berhasil. Dimulai pada VS 2008, cache majelis diperkenalkan yang digunakan oleh Visual Studio disebut "Majelis Dirujuk". Cache file ini untuk VS 2010 terletak di \ Referensi Assemblies \ Microsoft \ Framework.NetFramework \ v4.0. Visual Studio memuat rakitan kerangka dari lokasi ini alih-alih dari direktori pemasangan kerangka kerja. Ketika Microsoft mengatakan bahwa VS 2010 tidak mendukung DNFW 4.5 yang mereka maksud adalah bahwa direktori ini tidak diperbarui ketika DNFW 4.5 diinstal. Setelah Anda mengganti file di lokasi ini dengan file DNFW 4.5 yang diperbarui, Anda akan menemukan bahwa VS 2010 dengan senang hati akan berfungsi dengan DNFW 4.5.

Kapten Nasty
sumber
0

Dari pencarian lain. Bekerja untukku!

"Anda dapat menggunakan Visual Studio 2010 dan mendukungnya, asalkan OS Anda mendukung .NET 4.5.

Klik kanan pada solusi Anda untuk menambahkan referensi (seperti yang Anda lakukan). Ketika kotak dialog muncul, pilih browse, lalu navigasikan ke folder berikut:

C: \ Program Files (x86) \ Assemblies Referensi \ Microsoft \ Framework \ .Net Framework \ 4.5

Anda akan menemukannya di sana. "

Hermes Trismegistus
sumber
6
Dalam kalimat "Anda akan menemukannya di sana", apa itu "itu"? File mana dalam folder itu yang kita pilih? Akankah salah satu dari mereka membiarkan kami menargetkan .net 4.5 di VS 2010?
Jeff Roe
Anda akan menemukan majelis namespace. Anda dapat menambahkan mana yang Anda inginkan. Sebagai contoh, saya perlu menggunakan metode untuk bekerja dengan file ZIP. Jadi saya menemukan dll "System.IO.Compression.dll" dan menambahkannya ke proyek saya. Lalu saya bisa secara eksplisit mendaftar namespace dalam kode saya dan menggunakan metode yang saya butuhkan.
Hermes Trismegistus
1
Ini tidak berhasil untuk saya. Jika Anda menghapus referensi Anda ke, katakanlah, Sistem, lalu telusuri .Net 4.5 System.dll dan tambahkan itu sebagai referensi, VS masih memilih jawaban 4.0 System.dll Capt Nasty di halaman ini berfungsi untuk saya, misalnya salin System.dll dari C: \ Program Files (x86) \ Assemblies Referensi \ Microsoft \ Framework \ .NETFramework \ v4.6 dan letakkan di atas System.dll di C: \ Program Files (x86) \ Assemblies Referensi \ Microsoft \ Kerangka \ .NETFramework \ v4.0. Perhatikan bahwa ini adalah peretasan yang buruk dan mungkin memiliki konsekuensi yang tidak diinginkan.
Jinlye