首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更快的C#编译通过使用“对象”文件和合并后?

更快的C#编译通过使用“对象”文件和合并后?
EN

Stack Overflow用户
提问于 2013-10-04 12:32:16
回答 1查看 1K关注 0票数 1

我对C#非常陌生,在C++和Java领域有更多的知识。在编译C++或Java项目时,我习惯于为每个源文件单独执行编译。在C++中,然后执行将所有对象文件链接到一个库/exe/dll的附加步骤。

我看到了这种方法的几个优点,但我无法找到在C#中使用mono dmcs编译器来实现它的方法。假设我有两个文件,每个文件都有一个类。

OptionsSet.cs

代码语言:javascript
复制
interface OptionsSet {

    // 

}

DefaultOptionsSet.cs

代码语言:javascript
复制
class DefaultOptionsSet : OptionsSet {

    // 

}

我可以通过调用

代码语言:javascript
复制
dmcs mylib/OptionsSet.cs mylib/DefaultOptionsSet.cs -target:library -out:mylib.dll

但是,当我更改一个文件时,我不想重新编译所有源文件!做以下工作:

代码语言:javascript
复制
dmcs mylib/DefaultOptionsSet.cs -target:library -out:mylib/DefaultOptionsSet.dll

收益率

代码语言:javascript
复制
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看起来如下所示:

代码语言:javascript
复制
SOURCE_DIRS = mylib
SOURCES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.java))
CLASSES = $(SOURCES:java=class)

compile: $(CLASSES)

mylib/%.class: mylib/%.java
    javac $< -classpath .

但是我不能直接翻译这个来构建我的C#库。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-04 12:39:41

C#不支持做您想做的事情,在源文件(.cs)和最终程序集(.dll和.exe)之间只有一个步骤。

请记住,对于相同数量的源代码,C#编译器通常比C/C++编译器快得多(除其他外,这是因为C#不必为每个源文件读取兆字节的头文件),所以通常编译速度不是问题。

如果您真正想要的是将工作分成几个程序集(.dll文件),那么分别编译每个程序集,然后在构建主可执行文件时只引用这些程序集。但是,除非您的项目真的很大,否则您将花费更多的时间来实现这种拆分,而不是在完成时节省构建更少的时间。

我建议您不要担心长编译时间,除非您确实有长编译时间的问题。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19181225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档