กำหนดเป้าหมาย. NET Framework 4.5 ผ่าน Visual Studio 2010


170

วันนี้ฉันติดตั้ง. 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
Arran

ฉันรู้เกี่ยวกับข้อ จำกัด นี้เมื่อฉันพยายามใช้เมธอด System.Threading.Tasks.Task.Run () ในแอปพลิเคชันคอนโซล VS 2010 วิธีนี้จะไม่ปรากฏในคลาสงานหากโครงการของคุณกำหนดเป้าหมาย. Net framework 4.0 และจากนั้นคุณจะรู้ว่า VS2010 ไม่สามารถกำหนดเป้าหมาย. Net framework 4.5 ได้หากคุณต้องการ
RBT

คำตอบ:


194

Visual Studio แต่ละเวอร์ชันก่อน Visual Studio 2010 จะเชื่อมโยงกับ. NET Framework เฉพาะ (VS2008 คือ. NET 3.5, VS2005 คือ. NET 2.0, VS2003 คือ. NET1.1) Visual Studio 2010 ขึ้นไปอนุญาตให้กำหนดเป้าหมายของเฟรมเวิร์กเวอร์ชันก่อนหน้า แต่ไม่สามารถใช้สำหรับรุ่นในอนาคตได้ คุณต้องใช้ Visual Studio 2012 เพื่อใช้. NET 4.5


9
ไม่เป็นความจริงทั้งหมด - .NET 3.0 เผยแพร่ระหว่างเวอร์ชัน VS และสามารถใช้ได้ใน VS2005
Sly Gryphon

9
สิ่งที่เป็นปริศนา: ย้ายไปที่ vs2012 + เพื่อใช้ประโยชน์จาก. net 4.5 ที่สวยงามเสียค่าใช้จ่ายจากการสูญเสียโครงการติดตั้ง vs2010 อันเป็นที่รักสำหรับการปรับใช้โปรแกรมติดตั้ง msi ... "อัพเกรด" ให้ความรู้สึกเหมือน sidegrade ...
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 คุณจะพบข้อมูลอ้างอิงในนั้น เพียงเพิ่มมันก็ใช้งานได้
Hermes Trismegistus

2
@HermesTrismegistus ใน VS 2010 ฉันคลิก "Target Framework = ติดตั้งเฟรมเวิร์กอื่น ๆ " และนำฉันไปที่เว็บไซต์microsoft.com/net/download/visual-studio-sdksมันไม่ให้ฉันไปที่โฟลเดอร์ใด ๆ ฉันควรทำอย่างไรดี. ฉันต้องสามารถกำหนดเป้าหมาย 4.5 จาก VS 2010 Tks
Echeban

68

มีสถานการณ์ค่อนข้าง จำกัด ที่ฉันสามารถคิดได้ว่าสิ่งนี้จะมีประโยชน์ตรงไหน แต่สมมติว่าคุณไม่สามารถรับเงินเพื่อซื้อ VS2012 หรือบางสิ่งบางอย่างเพื่อให้ได้ผลนั้น หากเป็นเช่นนั้นและคุณมี Windows 7+ และ VS 2010 คุณอาจสามารถใช้แฮ็คต่อไปนี้ที่ฉันรวบรวมไว้ซึ่งดูเหมือนจะใช้งานได้ (แต่ฉันยังไม่ได้ติดตั้งแอปพลิเคชันโดยใช้วิธีนี้อย่างสมบูรณ์)

  1. สำรองไฟล์โครงการของคุณ !!!

  2. ดาวน์โหลดและติดตั้งWindows 8 SDKซึ่งรวมถึง. 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>
    

    ค. เพิ่ม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" (คุณสามารถปิด "CPU ใดก็ได้") และตรวจสอบให้แน่ใจว่าได้เลือก ".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" การสร้างควรจะสำเร็จ เมื่อคุณคอมไพล์ภายใต้แพลตฟอร์ม "CPU ใด ๆ " คุณควรได้รับข้อผิดพลาดของคอมไพเลอร์:

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

3
นี่คือ krazy แม้ว่าจะใช้งานได้องค์ประกอบ UI เช่นตัวออกแบบริบบิ้นจะทำงานโดยไม่มี xaml และข้อผิดพลาดอื่น ๆ หรือไม่ เพียงแค่อัปเกรดอย่างรวดเร็ว
ประเภทนิรนาม

1
นอกเหนือจากคำตอบของ David Woodward แล้วฉันยังเพิ่ม: <OutputPath>bin\</OutputPath>ใน PropertyGroup แรกเมื่อเกิดข้อผิดพลาดด้านล่าง: คุณสมบัติ OutputPath ไม่ได้ตั้งค่าสำหรับโครงการ 'ชื่อโครงการ'
mparkuk

นี่ใช้งานได้จริง แต่ฉันแค่ใช้มันเพื่อให้ฉันสามารถรัน Moles บน VS2010 ต่อไปได้หลังจากติดตั้ง. NET Framework 4.5.1
Conrad Clark

1
ฉันไม่สามารถหาวิธีทำขั้นตอนที่ 11 "... สร้างแพลตฟอร์มโซลูชันใหม่ ... " ได้สำเร็จ แต่ฉันพบว่าคำแนะนำนี้ประสบความสำเร็จโดยรวมหากละเลยขั้นตอนที่ 11
Tony Pulokas

8

FYI หากคุณต้องการสร้างแพ็คเกจ Installer ใน VS2010 น่าเสียดายที่มันกำหนดเป้าหมายเฉพาะ. NET 4 เท่านั้นในการแก้ไขปัญหานี้คุณต้องเพิ่ม NET 4.5 เป็นเงื่อนไขการเปิดตัว

เพิ่มสิ่งต่อไปนี้ในเงื่อนไขการเปิดตัวของโปรแกรมติดตั้ง (คลิกขวาดูเงื่อนไขการเปิดตัว)

ใน "Search Target Machine" คลิกขวาและเลือก "Add Registry Search"

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 อยู่ที่ \ Reference Assemblies \ 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: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ .Net Framework \ 4.5

คุณจะพบมันที่นั่น "


6
ในประโยค "You will find it there" "it" คืออะไร? เราเลือกไฟล์ใดในโฟลเดอร์นั้น หนึ่งในนั้นจะให้เรากำหนดเป้าหมาย. net 4.5 ใน VS 2010 หรือไม่?
Jeff Roe

คุณจะพบกับแอสเซมบลีเนมสเปซ คุณสามารถเพิ่มสิ่งใดก็ได้ที่คุณต้องการ ตัวอย่างเช่นฉันต้องใช้วิธีการทำงานกับไฟล์ ZIP ดังนั้นฉันจึงพบ dll "System.IO.Compression.dll" และเพิ่มลงในโครงการของฉัน จากนั้นฉันสามารถแสดงรายการเนมสเปซในโค้ดของฉันอย่างชัดเจนและใช้วิธีการที่ฉันต้องการ
Hermes Trismegistus

1
สิ่งนี้ไม่ได้ผลสำหรับฉัน หากคุณลบการอ้างอิงของคุณพูดว่า System จากนั้นเรียกดู. Net 4.5 System.dll และเพิ่มเป็นข้อมูลอ้างอิง VS ยังคงเลือกคำตอบ 4.0 System.dll Capt Nasty ในหน้านี้ที่ใช้ได้กับฉันเช่น copy System.dll จาก C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.6 และวางไว้ที่ด้านบนของ System.dll ใน C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0 โปรดทราบว่านี่เป็นการแฮ็กที่น่ารังเกียจและอาจมีผลที่ไม่คาดคิด
Jinlye
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.