通过Visual Studio 2010定位.NET Framework 4.5

Targeting .NET Framework 4.5 via Visual Studio 2010

今天,我在我的计算机上安装了.NET Framework 4.5,希望能够从Visual Studio 2010中使用它,因为它只是一个小更新,不会对Visual Studio 2010造成问题。不幸的是,即使手动删除某些4.0并添加相应的4.5程序集,也会导致原始的4.0程序集仍在项目中被引用。

是否可以将Visual Studio 2010的4.5版作为目标,如果可以,如何实现?我真的很想用这些丝带…


Visual Studio 2010之前的每个版本都绑定到特定的.NET框架。(vs2008是.NET 3.5,vs2005是.NET 2.0,vs2003是.NET 1.1)Visual Studio 2010及更高版本允许针对以前的框架版本,但不能用于将来的版本。必须使用Visual Studio 2012才能使用.NET 4.5。


我能想到的情况非常有限,但假设您无法获得资金购买VS2012或其他类似产品。如果是这样的话,并且您有Windows7+和Vs2010,那么您可能可以使用我放在一起的以下黑客程序,这些程序似乎可以工作(但我还没有完全部署使用此方法的应用程序)。

  • 备份项目文件!!!!

  • 下载并安装包含.NET 4.5 SDK的Windows 8 SDK。

  • 在VS2010中打开项目。

  • 在项目中创建一个名为Compile_4_5_CSharp.targets的文本文件,其中包含以下内容。(或只在此处下载-确保从文件名中删除扩展名".txt"):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <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>
  • 卸载项目(右键单击->卸载)。

  • 编辑项目文件(右键单击->编辑*.csproj)。

  • 在项目文件中进行以下更改:

    a.用步骤4中创建的目标文件替换默认的Microsoft.CSharp.targets

    1
    2
    3
    4
    5
    <!-- Old Import Entry -->
    <!-- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> -->

    <!-- New Import Entry -->
    <Import Project="Compile_4_5_CSharp.targets" />

    b.将默认平台改为.NET 4.5

    1
    2
    3
    4
    5
    <!-- Old default platform entry -->
    <!-- <Platform Condition=" '$(Platform)' == ''">AnyCPU</Platform> -->

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

    c.添加AnyCPU平台,允许针对项目属性中指定的其他框架。这应该在文件中第一个标记之前添加。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <PropertyGroup Condition="'$(Platform)' == 'AnyCPU'">
        <PlatformTarget>AnyCPU</PlatformTarget>
    </PropertyGroup>

    .
    .
    .
    <ItemGroup>
    .
    .
    .
  • 保存更改并关闭*.csproj文件。

  • 重新加载项目(右键单击->重新加载项目)。

  • 在配置管理器(build->configuration manager)中,确保为项目选择了".net 4.5"平台。

  • 仍在配置管理器中,为".NET 4.5"(您可以基于"任意CPU")创建新的解决方案平台,并确保为解决方案选择了".NET 4.5"。

  • 构建项目并检查错误。

  • 假设构建完成,您可以通过在源代码中添加对4.5特定类的引用来验证您确实是以4.5为目标的:

    1
    2
    3
    4
    5
    6
    7
    using System;
    using System.Text;

    namespace testing
    {
        using net45check = System.Reflection.ReflectionContext;
    }
  • 使用.NET 4.5平台编译时,构建应该成功。当您在"any cpu"平台下编译时,应该会得到一个编译器错误:

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

  • 仅供参考,如果您想在VS2010中创建一个安装程序包,不幸的是它只针对.NET 4。要解决这个问题,您必须添加NET 4.5作为启动条件。

    将以下内容添加到安装程序的启动条件中(右键单击、查看、启动条件)。

    在"搜索目标机器"中,右键单击并选择"添加注册表搜索"。

    1
    2
    3
    4
    5
    6
    Property: REGISTRYVALUE1
    RegKey: Software\Microsoft
    ET Framework Setup
    DP\v4\Full
    Root: vsdrrHKLM
    Value: Release

    添加新的"启动条件":

    1
    2
    3
    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框架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框架4.5.2

    启动条件参考:http://msdn.microsoft.com/en-us/library/vstudio/xxyh2e6a(v=vs.100).aspx


    我一直在努力与VS2010/DNFW 4.5集成,并最终得到了这个工作。从VS 2008开始,Visual Studio引入了程序集缓存,称为"引用的程序集"。此vs 2010文件缓存位于
    eference assemblesmicrosoftframework.netframeworkv4.0。Visual Studio从该位置而不是从框架安装目录加载框架程序集。当微软说vs 2010不支持dnfw 4.5时,他们的意思是在安装dnfw4.5时,这个目录不会得到更新。一旦您用更新的dnfw 4.5文件替换了这个位置的文件,您会发现vs 2010将很高兴地与dnfw4.5一起工作。


    从另一个搜索。为我工作!

    "如果您的操作系统支持.NET 4.5,您可以使用Visual Studio 2010,它确实支持它。

    右键单击解决方案以添加引用(和您一样)。当对话框显示时,选择"浏览",然后导航到以下文件夹:

    C:程序文件(x86)
    eference assemblesmicrosoftframework.net framework4.5

    你会在那里找到的。"