私は C# を初めて使用し、C++ と Java の分野でより多くの知識を持っています。C++ または Java プロジェクトをコンパイルするとき、私はコンパイルがソース ファイルごとに個別に実行されることに慣れています。C++ では、すべてのオブジェクト ファイルを 1 つのライブラリ/exe/dll にリンクする追加の手順が後で実行されます。
dmcs
この方法にはいくつかの利点がありますが、monoコンパイラを使用して C# で実現する方法が見つかりません。それぞれ 1 つのクラスを持つ 2 つのファイルがあるとします。
OptionsSet.cs
interface OptionsSet {
//
}
DefaultOptionsSet.cs
class DefaultOptionsSet : OptionsSet {
//
}
これを呼び出すことで、これをライブラリに正常にコンパイルできます
dmcs mylib/OptionsSet.cs mylib/DefaultOptionsSet.cs -target:library -out:mylib.dll
しかし、1 つのファイルを変更したときに、すべてのソース ファイルを再コンパイルしたくありません。次のことを行います。
dmcs mylib/DefaultOptionsSet.cs -target:library -out:mylib/DefaultOptionsSet.dll
収量
mylib\DefaultOptionsSet.cs(15,27): error CS0246: The type or namespace name `OptionsSet' could not be found. Are you missing an assembly reference?
Compilation failed: 1 error(s), 0 warnings
オプションを使用してアセンブリ参照を追加できることはわかってい-r
ますが、アセンブリ参照がまだコンパイルされていない場合はどうなりますか?
Java では、私の Makefile は次のようになります。
SOURCE_DIRS = mylib
SOURCES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.java))
CLASSES = $(SOURCES:java=class)
compile: $(CLASSES)
mylib/%.class: mylib/%.java
javac $< -classpath .
しかし、これを直接変換して C# ライブラリを構築することはできません。