Ubah proyek C ++ / CLI ke framework lain dari 4.0 dengan vs2010

153

Karena saya memutakhirkan proyek saya ke format proyek visual studio 2010, proyek C ++ / CLI saya ditargetkan ke .net framework 4.0.

Sangat mudah untuk mengganti versi kerangka kerja ke versi lain dari proyek C #, tapi saya tidak tahu bagaimana melakukan ini dalam proyek C ++ / CLI, saya tidak melihat pengaturan untuk ini di halaman properti proyek.

codymanix
sumber

Jawaban:

190

Ini muncul ketika Anda menekan F1 di dialog Kerangka dan Referensi:

Secara default untuk proyek baru, kerangka kerja yang ditargetkan diatur ke .NET Framework 4. IDE tidak mendukung memodifikasi kerangka kerja yang ditargetkan, tetapi Anda dapat mengubahnya secara manual. Dalam file proyek (.vcxproj), kerangka kerja target default diwakili oleh elemen properti v4.0. Untuk mengubah kerangka kerja yang ditargetkan, bongkar proyek, gunakan editor teks untuk membuka file proyek, dan kemudian ubah nilai elemen properti dari v4.0 ke versi lain yang diinstal di server Anda. Misalnya, jika Anda menentukan v3.5, yang mewakili .NET Framework v3.5, Visual Studio 2008 SP1 harus diinstal . Simpan dan tutup file, muat ulang proyek, dan verifikasi bahwa kerangka kerja yang ditargetkan ditampilkan di halaman properti. *

Itu tidak terlalu akurat pada proyek yang dikonversi, Anda harus menambahkan <TargetFrameworkVersion>elemen sendiri. Taruh di PropertyGroup berlabel "Global":

  <PropertyGroup Label="Globals">
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <others...>
  </PropertyGroup>

Ceritanya berbeda ketika Anda menggunakan VS2012 dan yang lebih tinggi, versi pertama VS yang memperoleh pengaturan Platform Toolset di halaman properti Umum. Anda kemudian harus memilih "v90" untuk mendapatkan bangunan yang tepat yang menargetkan 3.5. Namun itu kikuk, Anda harus memiliki semua versi VS menengah diinstal pada mesin untuk memiliki pilihan yang tersedia.

Mengapa Anda perlu menginstal VS2008 membutuhkan penjelasan dengan sendirinya. Masalah inti adalah bahwa perpustakaan runtime C (msvcrt100.dll dan lebih tinggi) berisi kode .NET untuk mendukung eksekusi kode terkelola. Detail penting adalah penginisialisasi modul yang memastikan CRT diinisialisasi dengan benar dalam program yang menggunakan kode C ++ / CLI. Kode itu selalu menargetkan .NET 4 dan karena terprogram dalam msvcrt100.dll (dan lebih tinggi), Anda selalu memiliki ketergantungan yang sangat keras pada runtime v4.0.30319. Anda hanya dapat memiliki ketergantungan v2.0.50727 murni ketika Anda menggunakan runtime C lama, msvcrt90.dll. Anda hanya dapat memastikan bahwa Anda memiliki ketergantungan msvcrt90.dll ketika Anda menggunakan #include file kompilator dari VS2008.

Fakta sulit yang dingin bahwa sangat penting untuk segera pindah ke .NET 4, Anda akan kesulitan membangun masalah seperti ini jika tidak. Ada beberapa kendala praktis untuk itu, .NET 4 tersedia secara luas secara gratis di semua target yang Anda bayangkan. Mengatasi FUD yang dikaitkan dengan pindah ke versi runtime yang lebih tinggi umumnya hanya masalah sebenarnya. Tidak ada alasan untuk takut dan ragu, itu stabil.

Hans Passant
sumber
8
Saya sekarang melakukan langkah-langkah ini tetapi sekarang saya mendapatkan kesalahan "MSB8009: .NET Framework 2.0 / 3.0 / 3.5 menargetkan toolset platform v90. Harap pastikan bahwa Visual Studio 2008 diinstal pada mesin". Saya tidak punya VS2008.
codymanix
8
Kutipan dari jawaban saya: "Visual Studio 2008 SP1 harus diinstal". Anda kehilangan alat bantu yang diperlukan.
Hans Passant
2
Mungkin Anda juga perlu menghapus file .suo dan membuka kembali solusi. Seperti dalam kasus saya.
alehro
Saya mendapatkan ini berfungsi hanya dengan menginstal Visual Studio 2008 express (gratis). Saya benar-benar mendapat banyak kesalahan ketika saya mengubah platform toolset ke v90. Kembali ke v100 memperbaiki semuanya!
simon.d
4
Saat membuat .NET Framework 4.0-program yang menggunakan proyek campuran C ++ / CLI dan C # menggunakan Visual Studio 2010, instal .NET Framework 4.5 (atau Visual Studio 2013, yang dilengkapi dengan .NET Framework 4.5) mengarah ke proyek-proyek C ++ / CLI di VS 2010 akan dibangun melawan 4,5 bukan sebelumnya 4.0. Ketika Anda memiliki proyek-C # yang dibangun terhadap 4.0 dalam solusi yang sama dengan referensi proyek-proyek C ++ / CLI, ini rusak. Memasukkan <TargetFrameworkVersion> v4.0 </TargetFrameworkVersion> dalam file vcxproj dari proyek C ++ / CLI memecahkan masalah ini. \ o /
Daniel Albuschat
18

Ya adalah mungkin untuk mengubah target bahkan untuk proyek C ++ terkelola:

Mengubah Target .NET Framework untuk C ++ / CLI (VS 2010) Untuk mengubah versi .NET Framework untuk proyek C ++ / CLI (VS 2010)

Klik kanan pada proyek di Solution Explorer dan klik Bongkar proyek. Klik kanan pada proyek yang tidak dimuat di Solution Explorer dan pilih Edit <projectname>.vcxprojdalam proyek, cari XML file node. <PropertyGroup Label="Globals">Dalam node tersebut cari node <TargetFrameworkVersion>(jika node tidak dapat ditemukan, tambahkan) Teks dalam node mendefinisikan kerangka kerja target. Itu bisa berupa v2.0, v3.0, v3.5 atau v4.0 Simpan file vcxproj dan tutup itu Klik kanan pada proyek yang tidak dimuat di Solution Explorer dan klik Muat Ulang Contoh Proyek <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

Catatan: Langkah-langkah ini hanya berlaku untuk Visual Studio 2010 karena menggunakan format baru file proyek C ++.

Sumber di MSDN: Cara: Mengubah Target .NET Framework

Brian R. Bondy
sumber
5

oleh pengguna anonim:

(Mengedit karena saya adalah pengguna baru dan tidak dapat menanggapi hal ini, siapa pun yang melihat hal ini merasa ragu untuk mengirimkan yang berikut ini) Mengubah Toolset ke v100 sebenarnya menyebabkan VS2010 untuk menargetkan .NET 4.0, meskipun masih akan muncul sebagai penargetan 3.5 di properti proyek. VS2010 harus benar-benar mengeluarkan peringatan tentang ini, karena saat ini muncul sebagai Anda meskipun Anda dapat menargetkan. NET 3.5 dengan toolset v100, yang Anda tidak bisa.

hakre
sumber
Ini karena multi-penargetan hanya memungkinkan Anda untuk menargetkan V2.0, 3.0, 3.5 dan 4.0; Versi 1.x dari .Net tidak dapat ditargetkan dengan cara ini
Jeroen Landheer
0

Di VS 2010 jika toolset diinstal, buka properti proyek-> config properties-> umum dan ubah Platform Toolset dari v90 ke v100.

nche
sumber