チュートリアルに沿ってコードを打ち込み、ビルドを実行したらエラーになってしまいました。
コンソールを見るとエラー内容は、
「cs0579:System.Reflection.AssemblyCompanyAttribute属性が重複」
というもの。
その他にも同じエラーコード:cs0579が同じファイルの複数行で起こっています。
発生したファイルは
ContosoUniversity\AssemblyInfo.cs
と表示されています。
正確にいうとビルドを直接実行したのではなく、スキャフォールディングの実行中のビルドの段階でエラーが発生しました。
スキャフォールディングを行うと、データモデルを元にして、CRUD(Create/Read/Update/Delete)処理を行う画面とコードが自動生成されます。
ビルドエラーの話からそれますが、スキャフォールディングについて簡単に触れておきます。
例えば、下記のようなStudent.csファイルにデータモデルクラスを記述したとます。
using System;
using System.Collections.Generic;
namespace ContosoUniversity.Models
{
public class Student
{
public int ID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public DateTime EnrollmentDate { get; set; }
public ICollection<Enrollment> Enrollments { get; set; }
}
}
スキャフォールディングを実行すると、上記のデータモデルクラス(Studentクラス)を元にしてStudentテーブルにレコードを追加したり、編集したり、削除したり、表示したりする画面とコードを自動生成してくれます。
なお、クラス名:Studentがテーブル名、ID、LastName、FirstMidName、EnrollmentDateがレコードの各項目名(列)に対応します。
また、「public ICollection<Enrollment> Enrollments { get; set; }」Enrollmentテーブルとの関連を表しています。
スキャフォールディングを実行すると、まずビルドが行われるのですが、そこでこのエラーが発生しました。
AssemblyInfo.cs ファイルには、アセンブリのバージョン、著作権情報、会社名、製品名などが含まれるそうです。
アセンブリとは、.NETアプリケーションの配置、バージョン管理、再利用、アクティベーション スコープ、およびセキュリティ権限の基本単位だそうです。アセンブリの情報は型やリソースとして保持し、その集合をアセンブリというようです。
AssemblyInfo.cs ファイルはビルド時に自動的に生成されるそうです。
AssemblyInfo.csのコード内容(一部抜粋)を以下に示します。
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute(“ContosoUniversity”)]
[assembly: System.Reflection.AssemblyConfigurationAttribute(“Debug”)]
[assembly: System.Reflection.AssemblyFileVersionAttribuute(“1.0.0.0”)]
[assembly: System.Reflection.AssemblyInfomationalVersionAttribute(“1..0.0”)]
[assembly: System.Reflection.AssemblyProductAttribute(“ContosoUniversity”)]
[assembly: System.Reflection.AssemblyTitleAttribute(“ContosoUniversity”)]
[assembly: System.Reflection.AssemblyVersionAttribute(“1.0.0.0”)]
~ 以下省略 ~
上記コードを見ると、確かに、著作権情報、会社名、製品名、バージョン情報などが定義されています。
上記コードの全ての[assembly: System.Reflection.Assembly〇〇(“〇〇”)]行で
行でcs0579:属性が重複のエラーとなりました。
(〇〇の部分は上記コードの各行を当てはめて読み替えます。)
どうして属性の設定が重複するAssemblyInfo.csが生成されたのか、皆目見当がつきません。
なにせこのファイルは、私がコードを書いたわけではなく、ビルド時に自動生成されるのですから。
困り果てた結果、自動生成をするならば、一旦AssemblyInfo.csファイルを削除をして再ビルドすれば、正常なファイルが再作成されるかもしれないと思い削除してみることにしました。
ソリューションエクスプローラーでconsotoUniversity/obj/Debug/net6.0フォルダにあるAssemblyInfo.csファイルを削除しました。
続いて、ビルドを行ったところコンパイルエラーもなく、正常に終了しました。
consotoUniversity/obj/Debug/net6.0フォルダにAssemblyInfo.csが再作成されているものと期待して、フォルダを見ましたが、AssemblyInfo.csファイルは生成されていません。
なんなんでしょうか?
AssemblyInfo.csファイルは必要のないファイルだったのでしょうか?
よくわかりません。
次にスキャフォールディングを行いましたが、こちらも正常に終了しました。
今回の壁では、どうしてエラーが起こるようなAssemblyInfo.csファイルが自動生成されたのか、原因は分からずじまいでした。
一旦、このファイルを削除してビルドをしましたが、AssemblyInfo.csファイルは生成されませんでした。これも何故なのかよく分かりません。
ビルドで生成されると思っていましたが、そうではないのかもしれません。
また、このファイルを削除した影響が、今後、起こるのか否かも分かりません。
今回の壁は、乗り越えたけど、この先、正しい方向に進んでいけるのか、ちょっと気になる壁でした。
余談ですが
8月2日から5日まで4連休です。
週4日勤務なので有給を一日とると4連休にすることができます。
このWebアプリのチュートリアルも4連休を利用して行っています。
こうゆう勉強は連続して、そして集中して行わないと効率が悪いように思います。
少し中休みができてしまうと、また振出しに戻ってやり直すことを今まで何度も経験してきました。
8月9日から12日も4連休になります。
このうち3日くらいをチュートリアルの日にしようかな。
コメント