Visual Studio 2010 ile .NET Framework 4.5'i Hedefleme


169

Bugün, Visual Studio 2010 için sorun teşkil etmemesi gereken küçük bir güncelleme olduğu için .NET Framework 4.5'i Visual Studio 2010'dan kullanabilmeyi bekleyen makineme yükledim. Ne yazık ki, bazı 4.0'ları elle bile kaldırmıyorum ve karşılık gelen 4.5 derlemelerinin eklenmesi, projede hala referans gösterilen orijinal 4.0 derlemelerine yol açtı.

Visual Studio 2010'dan 4.5 sürümünü hedeflemek mümkün mü ve evet ise, nasıl? Gerçekten kurdeleleri kullanmak istiyorum ...


.NET v4.5 için Visual Studio 2012 sürümüne yükseltmelisiniz.
Arran

VS 2010 konsol uygulamasında System.Threading.Tasks.Task.Run () yöntemini kullanmaya çalışırken bu kısıtlamayı öğrendim. Projeniz .Net framework 4.0'ı hedefliyorsa ve sonra VS2010'un .Net framework 4.5'i hedefleyemediğini fark ederseniz, bu yöntem Görev sınıfında görünmez.
RBT

Yanıtlar:


194

Visual Studio 2010'dan önceki her Visual Studio sürümü belirli bir .NET çerçevesine bağlıdır. (VS2008 .NET 3.5, VS2005 .NET 2.0, VS2003 .NET1.1'dir) Visual Studio 2010 ve sonraki sürümleri önceki çerçeve sürümlerinin hedeflenmesine izin verir, ancak gelecekteki sürümler için kullanılamaz. .NET 4.5 kullanmak için Visual Studio 2012 kullanmanız gerekir.


9
Tamamen doğru değil - VS 3.0 arasında .NET 3.0 yayınlandı ve VS2005'te kullanılabilir.
Sly Gryphon

9
Ne bir muamma: msi yükleyicileri dağıtmak için sevgili vs2010 Kurulum Projesini kaybetme pahasına .net 4.5'i güzel bir şekilde kullanmak için vs2012 + 'ya geçin ... "yükseltme" daha fazla bir sidegrade gibi hissediyor ...
ecoe

6
@ecoe - Kurulum ve Dağıtım proje türünü geri getiren bir VS 2013 uzantısı var: visualstudiogallery.msdn.microsoft.com/…
ajawad987

2
Bu yanlış. Bu özelliği kullanmak için yükseltmeniz gerekmez. Tek yapmanız gereken yeni bir referans eklemek ve ardından .NET 4.5 klasörüne göz atmaktır: C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \\. Net Framework \ 4.5. Referansı orada bulacaksınız. Sadece ekleyin ve çalışıyor
Hermes Trismegistus

2
@HermesTrismegistus VS 2010'da "Hedef Çerçeve = Diğer Çerçeveleri Yükle" yi tıklıyorum ve beni bir web sitesine götürüyor microsoft.com/net/download/visual-studio-sdks Herhangi bir klasöre gitmeme izin vermiyor. Ne yapmalıyım. VS 2010 4.5 hedeflemek gerekir. Tks.
Echeban

67

Bunun yararlı olacağı yerleri düşünebileceğim oldukça sınırlı senaryolar var, ancak diyelim ki VS2012 veya bu yönde bir şey satın almak için para alamıyorsunuz. Durum buysa ve Windows 7+ ve VS 2010'unuz varsa, birlikte çalıştığım aşağıdaki hack'i kullanabilirsiniz, bu da işe yarıyor gibi görünüyor (ancak bu yöntemi kullanarak henüz bir uygulamayı tam olarak dağıtmadım).

  1. Proje dosyanızı yedekleyin !!!

  2. .NET 4.5 SDK'sını içeren Windows 8 SDK'sını karşıdan yükleyip kurun .

  3. Projenizi VS2010'da açın.

  4. Projenizde Compile_4_5_CSharp.targetsaşağıdaki içeriklerle bir metin dosyası oluşturun . (Veya sadece buradan indirin - ".txt" uzantısını dosya adından kaldırdığınızdan emin olun):

    <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. Projenizi boşaltın (sağ tıklayın -> boşaltın).

  6. Proje dosyasını düzenleyin (sağ tıklayın -> Düzenle * .csproj).

  7. Proje dosyasında aşağıdaki değişiklikleri yapın:

    a. Varsayılanı Microsoft.CSharp.targets, 4. adımda oluşturulan hedef dosyayla değiştirin

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

    b. Varsayılan platformu şu şekilde değiştirin:.NET 4.5

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

    c. AnyCPUProje özelliklerinde belirtildiği gibi diğer çerçeveleri hedeflemeye izin vermek için platform ekleyin . Bu <ItemGroup>, dosyadaki ilk etiketten hemen önce eklenmelidir

    <PropertyGroup Condition="'$(Platform)' == 'AnyCPU'">
        <PlatformTarget>AnyCPU</PlatformTarget>
    </PropertyGroup>
    
    .
    .
    .
    <ItemGroup>
    .
    .
    .
    
  8. Değişikliklerinizi kaydedin ve *.csprojdosyayı kapatın .

  9. Projenizi yeniden yükleyin (sağ tıklayın -> Projeyi Yeniden Yükle).

  10. Yapılandırma yöneticisinde (Derleme -> Yapılandırma Yöneticisi) projeniz için ".NET 4.5" platformunun seçili olduğundan emin olun.

  11. Yine de yapılandırma yöneticisinde, ".NET 4.5" için yeni bir çözüm platformu oluşturun ("Any CPU" yu temel alabilirsiniz) ve çözüm için ".NET 4.5" in seçili olduğundan emin olun.

  12. Projenizi oluşturun ve hataları kontrol edin.

  13. Derlemenin tamamlandığı varsayılarak, kaynak kodunuza 4.5'e özgü bir sınıfa başvuru ekleyerek gerçekten 4.5'i hedeflediğinizi doğrulayabilirsiniz:

    using System;
    using System.Text;
    
    namespace testing
    {
        using net45check = System.Reflection.ReflectionContext;
    }
    
  14. ".NET 4.5" platformunu kullanarak derlediğinizde derleme başarılı olmalıdır. "Herhangi bir CPU" platformu altında derlediğinizde bir derleyici hatası almalısınız:

    Error 6: The type or namespace name 'ReflectionContext' does not exist in
    the namespace 'System.Reflection' (are you missing an assembly reference?)
    

3
bu işe yarasa bile krazy, şerit tasarımcısı gibi UI öğeleri xaml ve diğer hatalar olmadan çalışır mı? srsly sadece yükseltme.
Anonim Tür

1
David Woodward'ın cevabına ek olarak <OutputPath>bin\</OutputPath>, aşağıdaki hata oluştuğunda ilk PropertyGroup'a şunu ekledim: OutputPath özelliği proje 'proje adı' için ayarlanmadı.
mparkuk

Bu gerçekten işe yarıyor. Ama sadece kullanıyorum, böylece .NET Framework 4.5.1'i yükledikten sonra VS2010'da Moles'i çalıştırmaya devam edebiliyorum.
Conrad Clark

1
Adım 11, "... yeni bir çözüm platformu oluşturma ..." işleminin başarıyla nasıl yapılacağını anlayamadım, ancak adım 11 göz ardı edilirse, talimatların genel olarak başarılı olduğunu buldum.
Tony Pulokas

8

FYI, VS2010'da bir Installer paketi oluşturmak istiyorsanız, maalesef yalnızca .NET 4'ü hedefler. Bu soruna geçici bir çözüm bulmak için, NET 4.5'i başlatma koşulu olarak eklemeniz gerekir.

Yükleyicinin Başlatma Koşullarına aşağıdakileri ekleyin (Sağ tıklayın, Görüntüle, Başlatma Koşulları).

"Hedef Makinede Ara" seçeneğine sağ tıklayın ve "Kayıt Defteri Araması Ekle" yi seçin.

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

Yeni "Başlatma Koşulu" ekle:

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.

Nerede:

378389 = .NET Framework 4.5

378675 = Windows 8.1 yüklü .NET Framework 4.5.1

378758 = Windows 8, Windows 7 SP1 veya Windows Vista SP2'de yüklü .NET Framework 4.5.1

379893 = .NET Framework 4.5.2

Başlatma koşulu referansı: http://msdn.microsoft.com/en-us/library/vstudio/xxyh2e6a(v=vs.100).aspx


3

VS2010 / DNFW 4.5 entegrasyonu ile mücadele ediyorum ve sonunda bu işe başladım. VS 2008'den başlayarak, Visual Studio tarafından "Başvurulan Montajlar" adı verilen bir montaj önbelleği tanıtıldı. VS 2010 için bu dosya önbelleği \ Reference Assemblies \ Microsoft \ Framework.NetFramework \ v4.0 konumunda bulunur. Visual Studio, çerçeve derlemelerini çerçeve yükleme dizini yerine bu konumdan yükler. Microsoft, VS 2010'un DNFW 4.5'i desteklemediğini söylediğinde , DNFW 4.5 yüklendiğinde bu dizinin güncellenmemesi anlamına gelir . Bu konumdaki dosyaları güncelleştirilmiş DNFW 4.5 dosyalarıyla değiştirdikten sonra, VS 2010'un DNFW 4.5 ile mutlu bir şekilde çalışacağını göreceksiniz.


0

Başka bir aramadan. Benim için çalıştı!

"Visual Studio 2010'u kullanabilirsiniz ve işletim sisteminizin .NET 4.5'i desteklemesi koşuluyla destekliyor.

Referans eklemek için çözümünüzü sağ tıklayın (yaptığınız gibi). İletişim kutusu görüntülendiğinde, gözat'ı seçin, ardından aşağıdaki klasöre gidin:

C: \ Program Dosyaları (x86) \ Başvuru Derlemeleri \ Microsoft \ Framework \ .Net Framework \ 4.5

Orada bulacaksınız. "


6
"Orada bulacaksınız" cümlesinde, "o" nedir? Bu klasördeki hangi dosyayı seçiyoruz? Bunlardan biri VS 2010'da .net 4.5'i hedeflememize izin verecek mi?
Jeff Roe

Ad alanı derlemelerini bulacaksınız. İstediğinizi ekleyebilirsiniz. Örneğin, ZIP dosyalarıyla çalışmak için bir yöntem kullanmam gerekiyordu. Bu yüzden dll "System.IO.Compression.dll" bulundu ve benim projeye ekledi. Sonra açıkça kodumdaki ad alanını listeleyebilir ve ihtiyacım olan yöntemleri kullanabilirim.
Hermes Trismegistus

1
Bu benim için işe yaramıyor. Örneğin, System'e olan başvurunuzu kaldırır ve .Net 4.5 System.dll dosyasına göz atarsanız ve başvuru olarak eklerseniz, VS yine de 4.0 System.dll Capt Nasty'nin bu sayfadaki cevabı benim için çalışır, örneğin kopyalama System.dll dosyasını C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.6'dan C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ 'da System.dll'nin üstüne bırakın Çerçeve \ .NETFramework \ v4.0. Bu kötü bir kesmek olduğunu ve istenmeyen sonuçları olabilir unutmayın.
Jinlye
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.