web-dev-qa-db-ja.com

Visual Studio 2010を介した.NET Framework 4.5のターゲティング

今日は、Visual Studio 2010から使用できるようになることを期待して、.NET Framework 4.5を自分のマシンにインストールしました。これは、Visual Studio 2010には問題がないはずのマイナーアップデートです。対応する4.5アセンブリを追加しても、元の4.0アセンブリがプロジェクトで参照されたままになりました。

Visual Studio 2010からバージョン4.5をターゲットにすることは可能ですか。リボンを使いたいのですが….

163
Golvellius

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

190
Brad S

私がこれがどこで役に立つかについて考えることができるかなり限られたシナリオがあります、しかしあなたが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"用の新しいソリューションプラットフォームを作成し( "Any 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?)
    
66
David Woodward

参考までに、もしあなたがVS2010でインストーラパッケージを作成したいのであれば、残念ながらそれは.NET 4のみをターゲットにしています。

以下をインストーラの起動条件に追加します(右クリック、表示、起動条件)。

「検索対象マシン」で右クリックし、「レジストリ検索の追加」を選択します。

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/ja-jp/library/vstudio/xxyh2e6a(v = vs.100).aspx

7
cyberenergy

私は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でうまく機能することがわかります。

3
Capt Nasty

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

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

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

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

あなたはそれをそこで見つけるでしょう。」

0