C#における「モジュール」が指す範囲がわからない
Q&A
解決したいこと
C#において「モジュール」と言ったとき、それは何を示しているのか?
C#における「モジュール」という言葉の意味・範囲を知りたい。
アセンブリ、クラス、ファイルとはどういう関係なのか知りたい。
発生している問題・エラー
[ModuleInitializer]をメソッドにつけると「モジュール」の読み込み時に実行される。
Visual Studioで以下の2ファイルを作成して実行すると、モジュール初期化処理が呼ばれる。
- ModuleInitializerを含むクラス定義があるファイル(以下のMyClass.cs)
- そうではないクラス(名前空間も別)定義があるファイル(以下の、Main.cs)
- Mainメソッドはこっちにある
- MyClassの処理は呼んでいない
該当するソースコード
using System.Runtime.CompilerServices;
namespace ModuleTest2
{
// モジュールの初期化時に一度だけ呼ばれる
internal class MyClass2
{
[ModuleInitializer]
public static void Initializer1()
{
Console.WriteLine("ModuleInit1");
}
}
}
using System;
namespace ModuleTest
{
internal class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine("MyMain");
}
}
}
自分で試したこと
- 上記のコードを書いて動かしてみた
- モジュール初期化処理が動いた
-
ModuleInit1 MyMain
- 以下のキーワードで検索して記事を読んでみた
- C# モジュールとは
- C# ModuleInitializer
- 以下のコマンドを実行した。
csc /t:module Main.cs
- Main.netmodule ができた
- 以下のコマンドを実行した(エラーになった)。
csc /t:module MyClass.cs
- error CS0246: 型または名前空間の名前 'ModuleInitializerAttribute' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)
- error CS0246: 型または名前空間の名前 'ModuleInitializer' が見つかり(ry
- 解決はしていないが、System.Runtime.CompilerServices を含むアセンブリを指定できていないためと推測。
わかったこと
- アセンブリに複数の「モジュール」が含まれること
-
.NET と .NET Framework では、1 つまたは複数のソース コード ファイルからアセンブリをビルドできます。 .NET Framework では、アセンブリに 1 つまたは複数のモジュールを含めることができます。
- https://learn.microsoft.com/ja-jp/dotnet/standard/assembly/
-