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をターゲットにすることはできますか?リボンを本当に使いたい…


.NET v4.5をサポートするには、Visual Studio 2012にアップグレードする必要があります。
Arran

VS 2010コンソールアプリケーションでSystem.Threading.Tasks.Task.Run()メソッドを使用しようとしたときに、この制限について知りました。プロジェクトが.Net Framework 4.0を対象としていて、必要に応じてVS2010が.Net Framework 4.5を対象にできない場合、このメソッドはTaskクラスに表示されません。
RBT

回答:


194

Visual Studio 2010より前のバージョンのVisual Studioは、特定の.NETフレームワークに関連付けられています。(VS2008は.NET 3.5、VS2005は.NET 2.0、VS2003は.NET1.1)Visual Studio 2010以降では、以前のフレームワークバージョンを対象にすることができますが、将来のリリースでは使用できません。.NET 4.5を使用するには、Visual Studio 2012を使用する必要があります。


9
完全に真実ではありません-.NET 3.0はVSバージョン間でリリースされ、VS2005で使用できました。
Sly Gryphon 2013

9
難問:vs2012 +に移行して、msiインストーラーを展開するための最愛のvs2010セットアッププロジェクトを失うことで.net 4.5の優れた機能を利用する...「アップグレード」はサイドグレードのように感じる...
ecoe

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 "Target Framework = Install Other Frameworks"をクリックすると、ウェブサイトに移動しますmicrosoft.com/net/download/visual-studio-sdksどのフォルダーにも移動できません。私は何をすべきか。VS 2010から4.5をターゲットにできる必要があります。Tks。
エチェバン2017年

67

これが役立つと考えることができるかなり限られたシナリオがありますが、VS2012またはそのための何かを購入するための資金を得ることができないと仮定しましょう。これが当てはまり、Windows 7以降とVS 2010を使用している場合は、私がまとめた次のハックを使用できる可能性があります(ただし、まだこの方法を使用してアプリケーションを完全にデプロイしていません)。

  1. プロジェクトファイルをバックアップします!!!

  2. .NET 4.5 SDKを含むWindows 8 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. プロジェクトファイルに次の変更を加えます。

    a。デフォルト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」プラットフォームを使用してコンパイルすると、ビルドは成功するはずです。「任意の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やその他のエラーなしで機能しますか?srslyだけをアップグレードします。
匿名タイプ

1
David Woodwardの回答に加えて<OutputPath>bin\</OutputPath>、次のエラーが発生したときに最初のPropertyGroup に追加しました:プロジェクト 'プロジェクト名'のOutputPathプロパティが設定されていません。
mparkuk 2014年

これは確かに機能します。しかし、私はそれを使用しているだけなので、.NET Framework 4.5.1をインストールした後、VS2010でMolesを実行し続けることができます。
コンラッドクラーク

1
手順11を正常に実行する方法を理解することはできませんでした。「...新しいソリューションプラットフォームを作成してください...」ですが、手順11を無視した場合、手順は全体的に成功しています。
Tony Pulokas、2015年

8

参考までに、VS2010でインストーラーパッケージを作成する場合、残念ながらそれは.NET 4のみを対象としています。これを回避するには、起動条件として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 = .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

別の検索から。私のために働いた!

「お使いのOSが.NET 4.5をサポートしていれば、Visual Studio 2010を使用できます。

ソリューションを右クリックして、参照を追加します(行うように)。ダイアログボックスが表示されたら、[参照]を選択し、次のフォルダーに移動します。

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

そこにあります。」


6
「あなたはそこにそれを見つけるでしょう」という文で、「それ」とは何ですか?そのフォルダー内のどのファイルを選択しますか?そのうちの1つでVS 2010の.net 4.5をターゲットにできますか?
Jeff Roe 2016年

名前空間アセンブリが見つかります。どちらでも追加できます。たとえば、ZIPファイルを操作する方法を使用する必要がありました。そこで、「System.IO.Compression.dll」というdllを見つけてプロジェクトに追加しました。次に、コードに名前空間を明示的にリストし、必要なメソッドを使用できます。
エルメスTrismegistus 2017年

1
これは私にはうまくいきません。たとえばSystemへの参照を削除してから、.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 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.