กำหนดเป้าหมาย. 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.