C ++ / CLI projesini vs2010 ile 4.0'dan farklı bir çerçeveye değiştirin


153

Projemi visual studio 2010 proje biçimine yükselttiğim için C ++ / CLI projem .net framework 4.0'ı hedefliyor.

Çerçeve sürümünü bir C # projesinden başka bir sürüme geçirmek kolaydır, ancak bunu bir C ++ / CLI projesinde nasıl yapacağımı bilmiyorum, proje özellik sayfalarında bunun için bir ayar görmüyorum.

Yanıtlar:


190

Bu, Çerçeve ve Referanslar iletişim kutusunda F1 tuşuna bastığınızda görünür:

Yeni projeler için varsayılan olarak, hedeflenen çerçeve .NET Framework 4 olarak ayarlanır. IDE, hedeflenen çerçevenin değiştirilmesini desteklemez, ancak manuel olarak değiştirebilirsiniz. Proje dosyasında (.vcxproj), varsayılan hedeflenen çerçeve v4.0 özellik öğesi ile temsil edilir. Hedeflenen çerçeveyi değiştirmek için projeyi kaldırın, proje dosyasını açmak için bir metin düzenleyicisi kullanın ve sonra özellik öğesinin değerini v4.0'dan sunucunuzda yüklü başka bir sürüme değiştirin. Örneğin, .NET Framework v3.5'i temsil eden v3.5'i belirtirseniz, Visual Studio 2008 SP1'in yüklenmesi gerekir . Dosyayı kaydedip kapatın, projeyi yeniden yükleyin ve hedeflenen çerçevenin özellik sayfasında görüntülendiğini doğrulayın. *

Dönüştürülen projelerde bu çok doğru değil, <TargetFrameworkVersion>öğeyi kendiniz eklemeniz gerekecek . "Globals" etiketli PropertyGroup'a koyun:

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

Genel özellik sayfasındaki Platform Araç Seti ayarını alan VS'nin ilk sürümü olan VS2012 ve sonraki sürümleri kullandığınızda hikaye farklıdır. Daha sonra 3.5 hedefleyen uygun bir yapı elde etmek için "v90" seçmelisiniz. Ancak bu beceriksizdir, bu seçimin mevcut olması için makinede VS'nin tüm ara sürümlerinin yüklü olması gerekir.

Neden VS2008 yüklü ihtiyacınız kendi başına bir açıklama gerektirir. Temel sorun, C çalışma zamanı kitaplığının (msvcrt100.dll ve üstü) yönetilen kod yürütülmesini desteklemek için .NET kodu içermesidir. Önemli detay, CRT'nin C ++ / CLI kodu kullanan programda doğru şekilde başlatılmasını sağlayan bir modül başlatıcıdır. Bu kod her zaman .NET 4 hedefler ve msvcrt100.dll (ve üstü) içine sert pişmiş olduğundan her zaman v4.0.30319 çalışma zamanı üzerinde kaya gibi bir bağımlılık var. Sadece eski C runtime msvcrt90.dll kullandığınızda saf v2.0.50727 bağımlılığına sahip olabilirsiniz. Yalnızca derleyicinin #include VS2008 dosyalarını kullandığınızda msvcrt90.dll bağımlılığına sahip olduğunuzdan emin olabilirsiniz.

Yakında .NET 4'e geçmenin oldukça gerekli olduğu gerçeği, bunu yapmazsanız böyle sorunlarla mücadele edeceksiniz. Bunun için çok az pratik engel var, .NET 4 hayal edebileceğiniz tüm hedeflerde ücretsiz olarak kullanılabilir. Daha yüksek bir çalışma zamanı sürümüne geçmeyle ilişkili FUD'nin üstesinden gelmek genellikle sadece asıl konudur. Korku ve şüphe için hiçbir neden yok, kararlı.


8
Şimdi bu adımları yaptım ama şimdi "MSB8009: .NET Framework 2.0 / 3.0 / 3.5 v90 platform araç kümesi hedef. Lütfen Visual Studio 2008'in makinede yüklü olduğundan emin olun" hatasını alıyorum. VS2008'im yok.
codymanix

8
Cevabımdan alıntı: "Visual Studio 2008 SP1 yüklü olmalıdır". Gerekli oluşturma araçlarını kaçırıyorsunuz.
Hans Passant

2
Belki de .suo dosyasını silmeniz ve çözümü yeniden açmanız gerekecektir. Benim durumumda olduğu gibi.
alehro

Bu çalışma sadece Visual Studio 2008 express (ücretsiz) yükleyerek aldım. Platform araç setini v90 olarak değiştirdiğimde aslında bir ton hata aldım. V100'e geri dönmek hepsini düzeltti!
simon.d

4
Visual Studio 2010 kullanarak karma C ++ / CLI ve C # projeleri kullanan .NET Framework 4.0 programları oluştururken, .NET Framework 4.5 (veya .NET Framework 4.5 ile birlikte gelen Visual Studio 2013) yüklendiğinde C ++ / CLI projelerine yol açar VS 2010 daha önce 4.0 yerine 4.5'e karşı inşa edilecek. C ++ / CLI projelerine başvuran aynı çözümde 4.0'a karşı oluşturulmuş C # projeleriniz varsa, bu kesilir. C ++ / CLI projelerinin vcxproj dosyalarına <TargetFrameworkVersion> v4.0 </TargetFrameworkVersion> eklenmesi bu sorunu çözer. \ o /
Daniel Albuschat

18

Evet, yönetilen C ++ projeleri için bile hedefi değiştirmek mümkündür:

C ++ / CLI için Hedef .NET Framework'ü Değiştirme (VS 2010) C ++ / CLI projeleri için .NET Framework sürümünü değiştirmek için (VS 2010)

Çözüm Gezgini'nde projeye sağ tıklayın ve Projeyi kaldır'a tıklayın Çözüm Gezgini'nde yüklenmemiş projeye sağ tıklayın ve Düzenle'yi seçin <projectname>.vcxprojProje XML dosyasında düğüm bul <PropertyGroup Label="Globals">Bu düğümde düğümü bulun <TargetFrameworkVersion>(düğüm bulunamazsa ekleyin) Düğümün iç metni tanımlar hedef çerçeve. V2.0, v3.0, v3.5 veya v4.0 olabilir vcxproj dosyasını kaydet ve kapat <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

Not: Bu adımlar, yalnızca C ++ proje dosyalarının yeni biçimini kullandığından Visual Studio 2010 için geçerlidir.

MSDN'de Kaynak: Nasıl yapılır: Target .NET Framework'ü Değiştirme


5

anonim bir kullanıcı tarafından:

(Yeni bir kullanıcı olduğumdan ve bunu yanıtlayamadığından, bunu kimin göndereceğini düşünüyorsa düzenleme) Düzenleme Araç Seti'ni v100 olarak değiştirmek, VS2010'un .NET 3.5'i hedeflemesine rağmen, aslında .NET 4.0'ı hedeflemesine neden olur. proje özellikleri. VS2010 gerçekten bu konuda bir uyarı vermelidir, çünkü şu anda göründüğünüz gibi .NET 3.5'i v100 araç seti ile hedefleyebilirsiniz.


Bunun nedeni, çoklu hedeflemenin yalnızca V2.0, 3.0, 3.5 ve 4.0'ı hedeflemenize izin vermesidir;
Net'in

0

VS 2010'da araç seti yüklüyse proje özellikleri-> yapılandırma özellikleri-> genel'e gidin ve Platform Araç Seti'ni v90'dan v100'e değiştirin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.