我对 C# 非常陌生,并且在 C++ 和 Java 领域有更多的知识。在编译 C++ 或 Java 项目时,我习惯于单独为每个源文件执行编译。在 C++ 中,随后采取了将所有目标文件链接到一个库/exe/dll 的附加步骤。
我看到这种方法有几个优点,但我找不到使用单dmcs
编译器在 C# 中实现它的方法。假设我有两个文件,每个文件都有一个类。
选项集.cs
interface OptionsSet {
//
}
DefaultOptionsSet.cs
class DefaultOptionsSet : OptionsSet {
//
}
我可以通过调用成功地将其编译到库中
dmcs mylib/OptionsSet.cs mylib/DefaultOptionsSet.cs -target:library -out:mylib.dll
但是我不想在更改单个文件时重新编译所有源文件!执行以下操作:
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# 库。