Visual Studio 2010からプロジェクト ファイルの形式が変更となり、その拡張子も
と変更されています。
Visual Studio 2015以降、ソリューションに関連するファイルは、ソリューションのディレクトリの.vsディレクトリ以下に配置されます。そしてその情報は.vs\SolutionName\v14\.suoに記録されます。第2回 Visual Studio 2015の基礎を知る:連載:簡単! Visual Studio 2015入門(1/4 ページ) - @IT かわさきしんじ (2015/08/18)
ファイル名 | 説明 |
---|---|
Solname.sln | ソリューションのファイル。すべてのプロジェクトの要素を、1つのソリューションとしてまとめる。 |
Projname.suo | ソリューションのオプションのファイル。It stores your customizations for the solution so that every time you open a project or file in the solution, it has the appearance and behavior you want. |
Projname.vcxproj | プロジェクトのファイル。It stores information specific to each project. (In earlier versions, this file was named Projname.vcproj or Projname.dsp.) For an example of a Visual C++ project file, see Project Files. |
Projname.vcxitems | プロジェクトの共有項目のファイル。This project isn't built. Instead, the project can be referenced by another C++ project, and its files will become part of the referencing project's build process. This can be used to share common code with cross-platform C++ projects. |
Projname.sdf | 閲覧データベース ファイル。It supports browsing and navigation features such as Goto Definition, Find All References, and Class View. It is generated by parsing the header files.
[SQL Server desktop database file] |
Projname.VC.db | .sdfの代替。Visual Studio 2015 Update 2以降から適用 New, Improved, and Faster Database Engine | Visual C++ Team Blog What is the *.VC.db file in Visual Studio projects? - Stack Overflow |
.ncb | .sdfの前身。Visual Studio 2010より前
[no compile browse] |
Projname.vcxproj.filters | フィルター ファイル。It specifies where to put a file that is added to the solution. For example, a .h file is put in the Header Files node. |
Projname.vcxproj.user | 移動ユーザーファイル。After a project is migrated from Visual Studio 2008, this file contains information that was converted from any .vsprops file. |
Projname.idl | (プロジェクト固有) コントロール タイプ ライブラリーのインターフェイス記述言語 (Interface Description Language : IDL) のソースコードを含む。This file is used by Visual C++ to generate a type library. The generated library exposes the interface of the control to other Automation clients. For more information, see Interface Definition (IDL) File in the Windows SDK. |
インテリセンスのためのデータベースで、ソリューション ディレクトリにipchの名前でディレクトリが作成され、その中にProjectName-ID\ProjectName-ID.ipchのように配置されます。Troubleshooting Tips for IntelliSense Slowness | Visual C++ Team Blog
この保存場所はVisual Studioのオプションの【テキスト エディター → C/C++ → 詳細設定】にある[常にフォールバック位置を使用]をTrueとして、[フォールバック位置]にパスを指定することで変更できます。フォールバック位置を明示しない場合は、%TEMP%以下に保存されます。[オプション]、[テキスト エディター]、[C/C++]、[詳細] - Visual Studio | Microsoft Learn
保存場所の変更はソリューションを開き直した後に適用され、.ipchファイルは対象となるファイルを開いたときに作成されます。
.NETのアセンブリは、[アセンブリ]タブから追加できます。どのアセンブリを追加すべきかは.NET Framework クラス ライブラリで目的のクラスを探し、そこに記載されている[アセンブリ]の項目で確認できます。たとえばString クラス (System)に必要なアセンブリは、mscorlibです。
コンパイル時に「error CS0012: 型 '***' は、参照されていないアセンブリに定義されています。アセンブリ '***, Version=*.*, Culture=neutral, PublicKeyToken=***' に参照を追加する必要があります。」としてエラーとなる場合には、指定のアセンブリを参照に追加します。
「アセンブリ 'assembly' に参照を追加する必要があります」となっていますが、原文では「You must add a reference to assembly 'assembly'.」であり、アセンブリを参照に追加します。
アセンブリを参照に追加したのに「型または名前空間の名前 '***' が名前空間 '***' に存在しません (アセンブリ参照があることを確認してください)。」としてCS0234となるときには、目的のクラスが、対象としているフレームワークのバージョン (TargetFrameworkVersion) でサポートされているか確認します。
指定のアセンブリが実行環境でサポートされていないと、アセンブリの読み込み時にTypeLoadExceptionが投げられます。アセンブリはサポートされているがバージョンが古いことでメソッドが定義されていないと、メソッドの呼び出し時にMissingMethodExceptionが投げられます。
参照でアセンブリが見つからない場合には、それがインストールされていません。NuGetでそのアセンブリ名で検索してみます。
追加した参照に警告アイコンが表示され、ビルド時に「warning MSB3274: プライマリ参照 "***.dll" は、".NETFramework,Version=v*.*" フレームワークに対して作成されているため、解決できませんでした。これは現在ターゲットされているフレームワーク ".NETFramework,Version=v*.*" よりも新しいバージョンです。」としてエラーとなるときには、アセンブリが対象としているフレームワークのバージョンと、プロジェクトのそれを確認します。
ビルド時に「warning MSB3277: 同じ依存アセンブリの異なるバージョン間で、解決できない競合が見つかりました。 これらの参照上の競合は、ログの詳細度が詳細に設定されている場合にビルド ログにリストされます。」と表示される場合には、指示に従いオプションの【プロジェクトおよびソリューション → ビルド/実行】の[MSBuild プロジェクト ビルドの出力の詳細]を[詳細]に設定して、リビルドします。警告:MSB3277が出た時の対処法メモ - Qiita
ソリューション エクスプローラーで参照しているプロジェクトのプロパティを表示し、[ローカル コピー]を[True]とすることで、ビルド時にそのアセンブリがプロジェクトの出力パスにコピーされるようになります。方法 : 参照の [ローカル コピー] プロパティを設定する | MSDN
「コンピューターに *** がないため、プログラムを開始できません。」としてプログラムの実行に失敗するときには、その***がプロジェクトの出力パスにコピーされているか確認します。
この方法でコピーされないならば、ビルド イベントでcopyコマンドを利用します。
C++でディレクトリの指定などに使用できるマクロは、プロパティ シートのユーザー マクロで設定できます。
[出力ディレクトリにコピー]で[常にコピーする]または[新しい場合はコピーする]を指定することで、バイナリの出力パスにコピーを作成することができます。これのコピー先を特定のディレクトリにするには、プロジェクトにディレクトリを追加し、対象とするファイルをそのディレクトリ内へ移動します。