プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2018/11/13

MSB3105:重複した項目は"Sources"パラメータではサポートされていません

event_note2018/11/13 0:54

C# のプロジェクトをビルドした時に MSB3105 エラーが発生しました。

Visual Studio でビルドしていたときはエラーにならなかったのですが、docker コンテナ内 (microsoft/dotnet)でビルドすると上記のエラーがでました。

どうやら Windows 環境と Linux 環境のファイルの扱いの差異によるもののようです。

原因

大文字と小文字が異なるだけのファイルがあったことが原因です。
例えば、Hoge.cshoge.cs のようにです。

Windows 環境ではこのように大文字と小文字が異なるだけのファイルは作成できません。
しかし、Linux 環境ではできます。

Windows 環境においてファイル名の大文字と小文字だけを変更したときに、何故か Git 管理上では変更前のファイルと変更後のファイルが両方残ったままになっていたようで、そのまま Push してリポジトリ上には大文字と小文字が異なるだけのファイルが存在することになっていました。

ちなみに Git はデフォルトではファイル名の大文字と小文字を区別しませんが、今回もデフォルト設定もままでした。

で、このリポジトリを Windows 環境で Clone した場合、大文字と小文字が異なるだけのファイルは存在できないので、片方のファイルだけが Clone された状態になりますが、今回の場合はファイルの中身が2つとも全く同じだったので、ビルドも問題なくできていました。

逆に Linux 環境で Clone すると、大文字と小文字が異なるだけのファイルが存在しますが、C# コンパイラが対応していないためか、MSB3105 エラーが表示されたようです。

対策

何故このような状況になったかはよくわかりませんが、とりあえずリポジトリ上に大文字と小文字が異なるだけのファイルが存在しないようにすれば直りました。