我對C#很陌生,在C++和Java領域有更多的知識。編譯一個C++或Java項目時,我習慣於爲每個源文件自行編譯。在C++中,後續將所有目標文件鏈接到一個庫/ exe/dll中。通過使用「對象」文件並稍後合併更快的C#編譯?
我看到這種方法的幾個優點,但我找不到一種方法來實現它在C#中使用單聲道dmcs
編譯器。假設我有兩個文件,每個文件只有一個類。
OptionsSet.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#庫。
爲什麼不製作dll? – Sadique
@Acme我不是用上面的命令製作DLL文件嗎? ('-target:library') –
相關:[如何可以讓某人像Java一樣使用ac#增量編譯器?](http://stackoverflow.com/questions/5502440/how-could-someone-make-ac-sharp-incremental -compiler-like-java) – sloth