C# プロジェクトファイル (.csproj) の構成と編集、GitHub Desktop での変更保存方法

はじめに

この資料では、Visual Studio で使用される C# プロジェクトファイル(.csproj)の MSBuild 形式の定義内容について解説するとともに、プロジェクト ファイルを直接編集する手順と、GitHub Desktop を使用して Git 管理下で変更を保存・コミットする方法を説明します。
MSBuild の理解により、プロジェクトのビルド設定や参照、リソースの管理方法を把握でき、必要に応じたカスタマイズが可能となります。また、GitHub Desktop を利用することで、手軽に変更履歴を管理でき、チーム開発やバージョン管理が効率的に行えます。

※ Visual Studio はプロジェクト ファイルを自動的に更新する場合がありますが、自動保存はされないため、Git 管理下では必ず手動ですべて保存」して変更をコミットするよう注意してください。


1. プロジェクトファイル (.csproj) の構成と内容の説明

1-1. XML 宣言とプロジェクト要素

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  • XML 宣言: UTF-8 エンコーディングで記述されていることを示します。
  • Project 要素: MSBuild のルート要素であり、ToolsVersion="15.0" は Visual Studio 2017 相当のツールバージョンを示します。
  • xmlns: MSBuild の名前空間を定義しています。

1-2. 共通プロパティのインポート

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  • Microsoft.Common.props: MSBuild の標準プロパティやターゲットが定義されているファイルをインポートします。
  • Condition: 指定のファイルが存在する場合にのみインポートされます。

1-3. プロジェクト全体の基本プロパティの定義

<PropertyGroup>
  <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
  <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
  <ProjectGuid>{00E318B6-FD0C-4D04-AF78-6DFE834669CD}</ProjectGuid>
  <OutputType>WinExe</OutputType>
  <RootNamespace>CardGame</RootNamespace>
  <AssemblyName>CardGame</AssemblyName>
  <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
  <FileAlignment>512</FileAlignment>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <Deterministic>true</Deterministic>
</PropertyGroup>
  • Configuration/Platform: デフォルトの Debug 構成と AnyCPU プラットフォームを指定。
  • ProjectGuid: プロジェクトを一意に識別する GUID。
  • OutputType: Windows アプリケーション(WinExe)として出力。
  • RootNamespace/AssemblyName: 名前空間および生成されるアセンブリ名「CardGame」を設定。
  • TargetFrameworkVersion: .NET Framework 4.8 をターゲットに設定。
  • その他: 出力ファイルのアラインメント、バインディングリダイレクトの自動生成、ビルドの再現性を確保するためのオプション。

1-4. ビルド構成別のプロパティ定義

Debug 構成

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  <PlatformTarget>AnyCPU</PlatformTarget>
  <DebugSymbols>true</DebugSymbols>
  <DebugType>full</DebugType>
  <Optimize>false</Optimize>
  <OutputPath>bin\Debug\</OutputPath>
  <DefineConstants>DEBUG;TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
</PropertyGroup>
  • DebugSymbols / DebugType: フルデバッグ情報を生成。
  • Optimize: 最適化を無効にしてデバッグ向けに設定。
  • OutputPath: 出力ディレクトリは bin\Debug\
  • DefineConstants: コンパイル時に DEBUGTRACE を定義。

Release 構成

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <PlatformTarget>AnyCPU</PlatformTarget>
  <DebugType>pdbonly</DebugType>
  <Optimize>true</Optimize>
  <OutputPath>bin\Release\</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
</PropertyGroup>
  • DebugType: リリース時は PDB のみ生成。
  • Optimize: コード最適化を有効に。
  • OutputPath: 出力ディレクトリは bin\Release\
  • DefineConstants: TRACE のみ定義。

1-5. 参照(References)の定義

<ItemGroup>
  <Reference Include="System" />
  <Reference Include="System.Core" />
  <Reference Include="System.Xml.Linq" />
  <Reference Include="System.Data.DataSetExtensions" />
  <Reference Include="Microsoft.CSharp" />
  <Reference Include="System.Data" />
  <Reference Include="System.Deployment" />
  <Reference Include="System.Drawing" />
  <Reference Include="System.Net.Http" />
  <Reference Include="System.Windows.Forms" />
  <Reference Include="System.Xml" />
</ItemGroup>
  • .NET Framework の標準ライブラリやアセンブリへの参照が定義され、コード内で利用可能になります。

1-6. ソースコード、リソース、設定ファイルの定義

ソースコードファイル

<ItemGroup>
  <Compile Include="Card.cs" />
  <Compile Include="CardControl.cs">
    <SubType>UserControl</SubType>
  </Compile>
  <Compile Include="CardControl.Designer.cs">
    <DependentUpon>CardControl.cs</DependentUpon>
  </Compile>
  <!-- 他のソースファイルも同様に定義 -->
</ItemGroup>
  • Compile 要素: プロジェクトに含める C# ソースファイルを指定。
  • SubType / DependentUpon: デザイナー ファイルとその元ファイルの関連付けを行います。

埋め込みリソース

<ItemGroup>
  <EmbeddedResource Include="CardControl.resx">
    <DependentUpon>CardControl.cs</DependentUpon>
  </EmbeddedResource>
  <!-- 他のリソースファイルも同様に定義 -->
</ItemGroup>
  • EmbeddedResource: アプリケーションに埋め込むリソースを指定。
  • DependentUpon: 関連付けによる整理を行います。

設定ファイルと自動生成コード

<ItemGroup>
  <None Include="Properties\Settings.settings">
    <Generator>SettingsSingleFileGenerator</Generator>
    <LastGenOutput>Settings.Designer.cs</LastGenOutput>
  </None>
  <Compile Include="Properties\Settings.Designer.cs">
    <AutoGen>True</AutoGen>
    <DependentUpon>Settings.settings</DependentUpon>
    <DesignTimeSharedInput>True</DesignTimeSharedInput>
  </Compile>
</ItemGroup>
  • Settings.settings: アプリケーション設定の管理ファイル。
  • 自動生成コード: この設定から生成されるコードファイルが含まれています。

1-7. コンテンツファイルの定義

<ItemGroup>
  <Content Include="images\club_1.png">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </Content>
  <!-- 他の画像ファイルも同様に定義 -->
</ItemGroup>
  • Content 要素: 実行時に必要なファイル(画像など)を指定。
  • CopyToOutputDirectory: ビルド時に出力ディレクトリへ常にコピーされる設定です。

1-8. 最後のターゲットファイルのインポート

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  • Microsoft.CSharp.targets: C# プロジェクトのビルドに必要なターゲット定義を読み込み、コンパイルやリソースの埋め込みなどのビルド処理を実現します。

2. Visual Studio でプロジェクト ファイルを編集する方法

MSBuild プロジェクトを直接編集するには、Visual Studio の XML エディターを利用します。以下の手順でプロジェクト ファイルを編集してください。

手順

  1. プロジェクトのアンロード
    • ソリューション エクスプローラーで対象のプロジェクト ノードを右クリックし、「プロジェクトのアンロード」 を選択します。
    • アンロードされたプロジェクトには、(利用不可) のマークが付きます。
  2. プロジェクト ファイルの編集
    • アンロードされたプロジェクト ノードを右クリックし、「<プロジェクトファイル>の編集」 を選択します。
    • Visual Studio の XML エディターでプロジェクト ファイルが開くので、必要な変更を行い、ファイルを保存して閉じます。
  3. プロジェクトのリロード
    • ソリューション エクスプローラーで、利用不可となっているプロジェクト ノードを右クリックし、「プロジェクトのリロード」 を選択します。
    • 編集内容が反映されたプロジェクトが再度読み込まれます。

3. GitHub Desktop を使った変更保存とコミットの手順

GitHub Desktop を利用している場合、変更はすべて保存してコミットする必要があります。以下の手順で作業を進めてください。

手順

  1. 変更の保存
    • Visual Studio や他のエディターで .csproj ファイルやソースコードを編集した後は、必ず「保存」を行い、最新状態にします。
  2. GitHub Desktop で変更内容を確認
    • GitHub Desktop を起動すると、保存された変更が自動的に検出され、変更一覧(Diff)が表示されます。
    • ここで、どのファイルが変更されたかを確認します。
  3. ステージングとコミット
    • GitHub Desktop で、変更内容をステージに追加(チェックボックスの選択)し、コミットメッセージ(例:「プロジェクトファイルの編集と設定の更新」)を入力してコミットします。
    • コミットボタンをクリックすることで、変更がローカルリポジトリに記録されます。
  4. プッシュ
    • ローカルのコミットが完了したら、GitHub Desktop の上部に表示される「Push origin」ボタンをクリックして、リモートリポジトリに変更をプッシュします。

これらの操作により、すべての変更が GitHub 上でバージョン管理され、履歴として追跡可能になります。


まとめ

本資料では、以下の内容について説明しました。

  • プロジェクトファイルの構成:
    • XML 宣言、共通プロパティのインポート、基本プロパティ、ビルド構成別の設定、参照、ソースコード・リソース・設定ファイルの定義、コンテンツファイル、そしてターゲットファイルのインポートについて。
  • Visual Studio でのプロジェクト ファイル編集:
    • プロジェクトのアンロード、ファイルの直接編集、保存、そして再ロードする手順を紹介しました。
  • GitHub Desktop を使った変更保存とコミット:
    • 変更内容を保存後、GitHub Desktop で変更を確認、ステージング、コミット、プッシュする手順を説明し、Git 管理下での適切なバージョン管理の方法を解説しました。

これらの手順と知識を活用することで、プロジェクトのカスタマイズやバージョン管理がスムーズに行え、チーム開発やメンテナンスの効率が向上します。