Visual Studio のプロジェクト アップグレード後の変更について

現象

Visual Studio では以前のバージョンのプロジェクトを開くと、新しいバージョンの形式に変換を行うアップグレード機能を提供しています。
本機能では、可能な限り過去バージョンのプロジェクトを対象バージョンの Visual Studio で利用できるように設計実装されています。作業上のミスや工数を低減するためにも、基本的にはまずは Visual Studio のアップグレード機能によるアップグレードを推奨しております。

ただし、Visual Studio および実行環境のバージョンアップに伴う仕様の変更、セキュリティ上の対策などの理由で自動で完全な変換を行うことができない場合が存在します。その場合は、アップグレード時のログやビルド時のメッセージ、弊社サポート情報などをご確認いただき、別途手動で個別の変更にご対応いただく必要が生じます。

本技術情報では、上記のように完全な変換に対応していない点について、代表的な例と具体的な編集方法を記載します。
なお本技術情報は、基本的にマネージ (.NET Framework ベース) のプロジェクトを対象としております。


解決方法

※ご注意:作業前に下記の事前確認を行ってください
  • プロジェクトのバックアップ

    本技術情報での手順を実施される前には必ず対象プロジェクト全体のバックアップを行ってください。
    特に、一部プロジェクトファイルの手動での編集手順を記載しておりますが、その際は記載の要素以外の編集を行わないよう十分ご留意ください。誤編集により引き起こされた事象については責任を負いかねます。

  • 移行前の整合性の確認

    移行前のプロジェクトにおいて、例えば特定のファイルを開くタイミングでエラーが発生するなど、既にプロジェクト内に何らかの不整合が生じている場合は、正常に変換が行われない可能性が高くなります。
    移行前には必ずプロジェクトの各ファイルが存在しており、正常に開けることをご確認ください。
    また、ビルド時のエラー、警告等も可能な限り移行前に対処いただくことで、移行後に発生する問題について、移行に伴うものか、それ以前から発生している問題かが明確になり、より適切な対処が可能です。


個別に手動変更が必要となる可能性のある要素の代表的な例

以下にそれぞれの要素ごとの変更方法を 記載します。
  1. 対象の .NET Framework バージョン

    Visual Studio のマネージ プロジェクトは、Visual Studio 2008 からマルチターゲットに対応しております。このため、これ以前のバージョンで作成したプロジェクトの場合は、TargetFrameworkVersion 要素で明示的に対象の .NET Framework バージョンを指定する必要があります。
    なおこの場合、複数のプロジェクトで構成されるアプリケーションでは、最も高いバージョンの .NET Framework バージョンに統一して指定してください。
    これにより、プロジェクト間での参照を行うタイミング、もしくは実行時に必要なバージョンが存在しないことが原因で発生するエラーを防止できます。

    < Visual Basic .NET および C# のプロジェクトの場合 >
    プロジェクトのプロパティで [対象のフレームワーク] のバージョンを任意の値に変更し、保存します。
    これにより、 TargetFrameworkVersion 要素が新規に作成されます。
    この後で改めて、[対象のフレームワーク] バージョンを適切なバージョンに設定します。

    <C++ のプロジェクトの場合 >
    以下手順に従って変更を行います

    方法: ターゲット フレームワークおよびプラットフォームのツールセットを変更する
    http://msdn.microsoft.com/ja-jp/library/vstudio/ff770576.aspx

    なお、C++ の場合は、TargetFrameworkVersion と Visual C++ のツールセットは対にして変更する必要があります。
    以下のような対応付けになるよう変更します。

     .NET Framework 4.5.1 --- v120 (Visual C++ 2013) ツールセット
     .NET Framework 4.5 --- v110 (Visual C++ 2012) ツールセット
     .NET Framework 4 ----- v100 (Visual C++ 2010) ツールセット
    .NET Framework 3.5 --- v90 (Visual C++ 2008) ツールセット

  2. 参照アセンブリパスの情報 (Visual C++)

    Visual C++ のプロジェクトでは、参照アセンブリのパスを管理する情報の構造自体が Visual Studio 2010 から変更になっております。
    そのため、移行後に参照アセンブリのパス情報が失われ、ビルドにて該当アセンブリを参照できずエラーが発生する場合があります。
    この場合は、プロジェクトの [参照] 画面から正常に参照できていないアセンブリを確認し、一旦削除したうえで再度の参照設定を行います。

    < 参考 >
    Visual Studio 2008 以前と Visual Studio 2010 からの形式はそれぞれ以下のとおりです。安全に参照情報を設定するため、手動での編集は避けて上記のとおりプロジェクトを開いて画面上で再設定を行ってください。

    (Visual Studio 2008 以前の形式)
       <AssemblyReference
           RelativePath="..\..\ClassLibrary1.dll"
           AssemblyName="ClassLibrary1, Version=1.0.0.0"

    (Visual Studio 2010 からの形式)
        <Reference Include="ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
          <HintPath>..\..\ClassLibrary1.dll</HintPath>

     
  3. 既定のコンパイル オプション (Visual C++)
    Visual C++ プロジェクトでは、以下のコンパイル オプションの既定値が以前のバージョンの場合異なる可能性があります。

    [構成プロパティ] - [リンカー] - [詳細設定]

    [ランダム化されたベース アドレス] - [はい (/DYNAMICBASE)]
    [データ実行防止] - [はい (/NXCOMPAT)]

    ※Visual Studio 2012 および Visual Studio 2013 での既定値は上記のとおりです。

  4. 既定のコンパイル オプション (Visual Basic .NET)
    Visual Basic .NET プロジェクトでは、以下のコンパイル オプションの既定値が以前のバージョンの場合異なる可能性があります。

    [プロジェクトのプロパティ] - [コンパイル] タブ - [コンパイル オプション]

    [Option Strict] - [Off]
    [Option Infer] - [On]

    ※Visual Studio 2012 および Visual Studio 2013 での既定値は上記のとおりです。

  5. プラットフォーム ターゲット (Visual Basic .NET)
    以前のバージョンからアップグレードしたプロジェクトでは、ソリューションが [Any CPU] の構成でも、個々のプロジェクトの [プラットフォーム ターゲット] が [x86] に設定されている可能性があります。
    プロジェクトごとの [プラットフォーム ターゲット] は以下の設定で確認します。

    [プロジェクトのプロパティ] - [ビルド] タブ - [プラットフォーム ターゲット]

  6. 警告の構成 (Visual Basic .NET)
    Visual Basic .NET プロジェクトでは、ビルド時の警告の構成の既定値が以前のバージョンの場合異なる可能性があります。
    Visual Studio 2012 および Visual Studio 2013 の既定値で警告が設定される条件は以下のとおりです。
    • 割り当て前の変数の使用
    • 戻り値なしで参照型を返す関数
    • 戻り値なしで組み込み値型を返す関数
    • 未使用のローカル変数
    • 共有メンバーにアクセスするインスタンス変数
    • 演算子またはプロパティの再帰的なアクセス
    • 重複またはオーバーラップする catch ブロック


詳細

開発中のプロジェクトが以前のバージョンの Visual Studio からアップグレードされたプロジェクトであるかを確認する場合、プロジェクト ファイルをテキスト エディタで開いて以下のいずれかのフラグが存在するかを確認します。
いずれかのフラグが存在していれば、現在の Visual Studio より以前のバージョンで作成されたプロジェクトであることを意味します。
  • <FileUpgradeFlags>
  • <OldToolsVersion>
  • <UpgradeBackupLocation>
  
プロパティ

文書番号:2857785 - 最終更新日: 2016/09/29 - リビジョン: 1

フィードバック