Nik*_*s R 1 .net c# mono compilation assembly-references
我是C#的新手,对C++和Java领域有更多的了解.在编译C++或Java项目时,我习惯于为每个源文件自己执行编译.在C++中,然后将所有目标文件链接到一个库/ exe/dll中的附加步骤.
我在这个方法中看到了几个优点,但是我找不到使用单声道dmcs编译器在C#中实现它的方法.假设我有两个文件,每个文件都有一个类.
OptionsSet.cs
interface OptionsSet {
//
}
Run Code Online (Sandbox Code Playgroud)
DefaultOptionsSet.cs
class DefaultOptionsSet : OptionsSet {
//
}
Run Code Online (Sandbox Code Playgroud)
我可以通过调用将其成功编译到库中
dmcs mylib/OptionsSet.cs mylib/DefaultOptionsSet.cs -target:library -out:mylib.dll
Run Code Online (Sandbox Code Playgroud)
但是当我更改单个文件时,我不想重新编译所有源文件!执行以下操作:
dmcs mylib/DefaultOptionsSet.cs -target:library -out:mylib/DefaultOptionsSet.dll
Run Code Online (Sandbox Code Playgroud)
产量
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
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用该-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 .
Run Code Online (Sandbox Code Playgroud)
但我不能直接翻译它来构建我的C#库.
C#不支持执行您想要执行的操作,源文件(.cs)和最终程序集(.dll和.exe)之间只有一个步骤.
心里有一个C#编译器是一般很多比C/C++编译器同样多的源代码快(除其他事项外,这是因为C#没有阅读的头文件兆字节为每个源文件) ,所以一般编译速度不是问题.
如果你真的想要做的是将你的工作分成几个程序集(.dll文件),分别编译,然后在构建主可执行文件时引用这些程序集.但是,除非您的项目非常大,否则您将花费更多时间来实施此拆分,而不是在完成建设后节省的时间.
我建议不要担心编译时间过长,除非你确实遇到编译时间过长的问题.
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |