通过Visual Studio 2010定位.NET Framework 4.5


169

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

是否可以将Visual Studio 2010中的版本4.5定位为目标,如果是,则如何?我真的很想用丝带...


您必须升级到Visual Studio 2012 for .NET v4.5支持。
Arran 2012年

当我尝试在VS 2010控制台应用程序中使用System.Threading.Tasks.Task.Run()方法时,我就知道了这一限制。如果您的项目面向.Net Framework 4.0,则此方法不会出现在Task类上,然后您意识到VS2010不能针对.Net framework 4.5。
RBT

Answers:


194

Visual Studio 2010之前的每个Visual Studio版本都与特定的.NET框架绑定。(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 2013年

9
真是个难题:迁移到vs2012 +以利用.net 4.5的精巧之处,却以失去受欢迎的vs2010安装项目来部署msi安装程序为代价……“升级”感觉更像是侧向升级……
ecoe 2014年

6
@ecoe-有一个VS 2013扩展,可带回安装和部署项目类型:visualstudiogallery.msdn.microsoft.com/…–
ajawad987

2
这是不正确的。您无需升级即可使用此功能。您需要做的就是添加一个新引用,然后浏览到.NET 4.5文件夹:C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \\。Net Framework \ 4.5。您可以在此处找到参考。只需添加它即可使用
Hermes Trismegistus

2
VS 2010中的@HermesTrismegistus我单击“目标框架=安装其他框架”,它带我到网站microsoft.com/net/download/visual-studio-sdks。它不允许我导航到任何文件夹。我该怎么办。我必须能够从VS 2010中定位4.5。Tks。
Echeban

67

在有限的情况下,我可以想到这在什么地方有用,但让我们假设您没有资金购买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" />
    

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

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

    C。添加AnyCPU平台以允许按项目属性中指定的其他框架定位。应该将其添加<ItemGroup>到文件中的第一个标签之前

    <PropertyGroup Condition="'$(Platform)' == 'AnyCPU'">
        <PlatformTarget>AnyCPU</PlatformTarget>
    </PropertyGroup>
    
    .
    .
    .
    <ItemGroup>
    .
    .
    .
    
  8. 保存您的更改并关闭*.csproj文件。

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

  10. 在配置管理器(构建->配置管理器)中,确保为项目选择了“ .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”平台进行编译时,构建应该成功。在“ Any CPU”平台上进行编译时,应出现编译器错误:

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

3
即使这行得通,这还是很疯狂的,功能区设计器之类的UI元素可以正常工作而不会产生大量xaml和其他错误吗?刚升级。
匿名类型,

1
除了David Woodward的答案外,我还添加了:<OutputPath>bin\</OutputPath>在出现以下错误时添加到第一个PropertyGroup:未为项目“项目名称”设置OutputPath属性。
mparkuk 2014年

这确实有效。但是我只是使用它,因此在安装.NET Framework 4.5.1之后,我可以在VS2010上继续运行Moles。
康拉德·克拉克

1
我无法弄清楚如何成功完成步骤11,“ ...创建新的解决方案平台...”,但是我发现如果忽略步骤11,说明总体上是成功的。
托尼·普洛卡斯

8

仅供参考,如果要在VS2010中创建安装程序包,很遗憾,它仅针对.NET4。要解决此问题,您必须添加NET 4.5作为启动条件。

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

在“搜索目标计算机”中,右键单击并选择“添加注册表搜索”。

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 = Windows 8.1安装了.NET Framework 4.5.1

378758 =在Windows 8,Windows 7 SP1或Windows Vista SP2上安装的.NET Framework 4.5.1

379893 = .NET Framework 4.5.2

启动条件参考:http : //msdn.microsoft.com/zh-cn/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

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

“只要您的操作系统支持.NET 4.5,您就可以使用Visual Studio 2010并支持它。

右键单击您的解决方案以添加参考(如您所愿)。显示对话框时,选择浏览,然后导航到以下文件夹:

C:\ Program Files(x86)\ Reference Assemblys \ Microsoft \ Framework \ .Net Framework \ 4.5

您将在这里找到它。”


6
在句子“您将在这里找到它”中,“它”是什么?我们选择该文件夹中的哪个文件?其中一个可以让我们在VS 2010中定位.net 4.5吗?
杰夫·罗

您将找到名称空间程序集。您可以添加所需的任何一个。例如,我需要使用一种处理ZIP文件的方法。因此,我找到了“ System.IO.Compression.dll” dll,并将其添加到我的项目中。然后,我可以在代码中显式列出名称空间,并使用所需的方法。
爱马仕(Hermes Trismegistus)

1
这对我不起作用。如果删除对系统的引用,然后浏览到.Net 4.5 System.dll并将其添加为引用,VS仍然会选择4.0 System.dll Capt Nasty在此页面上的答案对我有用,例如,复制从C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.6中的System.dll并将其放在C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \中System.dll的顶部Framework \ .NETFramework \ v4.0。请注意,尽管这是一个令人讨厌的骇客,并且可能会带来意想不到的后果。
Jinlye
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.