小春网

 找回密码
 注册账号
查看: 323|回复: 2
收起左侧

[IT 交流] 关于C#链接的问题

[复制链接]
发表于 2013-11-24 12:16:59 | |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

x
迷糊用C语言做了一个小程序
http://www.incnjp.com/foru ... &extra=page%3D1

由于C语言支持 编译(compile)和链接(link)两个步骤
所以可以独立的把所有的.c文件编译成.obj(vc)/.o(gcc)
然后再连接起来生成可执行文件.exe(win)/.out(linux)

C++的思路和C基本一样,也很容易实现

JAVA虽然也不支持link,但是可以考虑把所有的.java文件独立的编译为.class文件
运行时,这些单独的.class文件可以互相操作,有点儿动态链接的感觉
实现起来也比较容易

到了C#这里,不支持link,在编译时必须指定输出文件的形式为exe或者dll
没有途中的obj或者类似的形式

问题是有没有什么办法,能够实现每个cs文件单独编译出二进制的文件
然后链接成最终的可执行文件,或者像JAVA那样动态的链接吗?

之所以问这个问题的理由是:
C/C++/JAVA都可以很容易的实现出:
系统的一部分由A开发,另一部分由B开发
B只需要提交给A 编译、链接时需要的二进制文件,A就能很容易的编译出最终的系统文件

而C#貌似没有这种简单的机制
必须得A做exe,B做dll,然后A调用B
迷糊想要的是,A把exe分工一下,A和B分别独立开发不同模块,B提交给A的时候不给源代码,但可以提交源代码以外的任何编译需要的东东,A可以生成最终系统而不需要B的源代码

希望高手不吝赐教
 楼主| 发表于 2013-11-24 13:25:11 |
暂定解决办法:
1)编译
csc /nologo /t:module /out:.\out\Player1.netmodule  ..\src\Player1.cs
csc /nologo /t:module /out:.\out\Player2.netmodule  ..\src\Player2.cs
csc /nologo /t:module /out:.\out\Guessnum.netmodule ..\src\Guessnum.cs

2)“链接”
csc /nologo /t:exe /out:.\out\Guessnum.exe /addmodule:.\out\Player1.netmodule;.\out\Player2.netmodule ..\src\Guessnum.cs

问题转换为,第二个步骤是“伪链接”
如果能把[..\src\Guessnum.cs]改为类似于[/addmodule:.\out\Guessnum.netmodule]就接近于真正意义的链接,问题就算解决了

但是真的改过去之后,链接时总提示没有Main函数定义

命令:csc /nologo /t:exe /out:.\out\Guessnum.exe /addmodule:.\out\Player1.netmodule;.\out\Player2.netmodule;.\out\Guessnum.netmodule

输出:error CS5001: Program 'c:\cygwin\guessnum\C#\build\out\Guessnum.exe' does not
        contain a static 'Main' method suitable for an entry point

还在继续抓狂中……
 楼主| 发表于 2013-11-24 13:58:39 |
折腾半天,在网上找到了解决问题的办法
链接如下:

http://www.cnblogs.com/365up/archive/2009/10/05/1578074.html
小春网
常务客服微信
微信订阅号
手机客户端
扫一扫,查看更方便! 快速回复 返回顶部 返回列表