我对C#非常陌生,在C++和Java领域有更多的知识。在编译C++或Java项目时,我习惯于为每个源文件单独执行编译。在C++中,然后执行将所有对象文件链接到一个库/exe/dll的附加步骤。
我看到了这种方法的几个优点,但我无法找到在C#中使用mono 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#库。
发布于 2013-10-04 12:39:41
C#不支持做您想做的事情,在源文件(.cs)和最终程序集(.dll和.exe)之间只有一个步骤。
请记住,对于相同数量的源代码,C#编译器通常比C/C++编译器快得多(除其他外,这是因为C#不必为每个源文件读取兆字节的头文件),所以通常编译速度不是问题。
如果您真正想要的是将工作分成几个程序集(.dll文件),那么分别编译每个程序集,然后在构建主可执行文件时只引用这些程序集。但是,除非您的项目真的很大,否则您将花费更多的时间来实现这种拆分,而不是在完成时节省构建更少的时间。
我建议您不要担心长编译时间,除非您确实有长编译时间的问题。
https://stackoverflow.com/questions/19181225
复制相似问题