プロジェクト

ファイル形式

C++

Visual Studio 2010からプロジェクト ファイルの形式が変更となり、その拡張子も

  • .vcproj … Visual Studio 2008以前
  • .vcxproj … 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.
Project and Solution Files | Microsoft Learn
ipch

インテリセンスのためのデータベースで、ソリューション ディレクトリに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ファイルは対象となるファイルを開いたときに作成されます。

C#

MSBuild プロジェクト ファイル

参照 (References)

参照の追加

.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

ローカル コピー (Copy Local) / ローカルにコピー

ソリューション エクスプローラーで参照しているプロジェクトのプロパティを表示し、[ローカル コピー]を[True]とすることで、ビルド時にそのアセンブリがプロジェクトの出力パスにコピーされるようになります。方法 : 参照の [ローカル コピー] プロパティを設定する | MSDN

コンピューターに *** がないため、プログラムを開始できません。」としてプログラムの実行に失敗するときには、その***がプロジェクトの出力パスにコピーされているか確認します。

この方法でコピーされないならば、ビルド イベントでcopyコマンドを利用します。

プロパティ

プロジェクト

C++でディレクトリの指定などに使用できるマクロは、プロパティ シートのユーザー マクロで設定できます。

リソース

[出力ディレクトリにコピー]で[常にコピーする]または[新しい場合はコピーする]を指定することで、バイナリの出力パスにコピーを作成することができます。これのコピー先を特定のディレクトリにするには、プロジェクトにディレクトリを追加し、対象とするファイルをそのディレクトリ内へ移動します。

Microsoft Learnから検索