2010-08-18 101 views
2

我有一个WinForm应用程序。我编译它,双击它。可以预料的是,csc.exe会启动,然后消失,应用程序出现。为什么C#编译器第二次启动?

我假设在这一点上的应用程序已实时编译,所以没有理由CSC.EXE在以后再踹。

然后我退出应用程序并重新启动它。我看到csc.exe再次启动。

发生了什么事?

+0

@Timwi。通过双击,我的意思是我启动我的app.exe。它不在IDE内部。 – AngryHacker 2010-08-18 21:03:57

回答

4

你是否在使用序列化?我相信在某些情况下会建立一个临时议会。你的应用中有类似的东西吗?

注意,JIT编译器是无关的CSC,所以这不应该是什么关系呢。

+0

@Downvoter:谨慎评论?为什么这是一个这么愚蠢的想法? – 2010-08-18 21:02:04

+0

我的错误!意外点击!已经撤消!抱歉! – Timwi 2010-08-18 21:03:58

+0

@Timwi:Goodo :) – 2010-08-18 21:04:15

2

如果您使用序列化需要,以创建所需的类编译动态组装。

这意味着大多数webservice调用都会导致第一次调用csc.exe。之后,动态DLL应该是缓存。

+0

有对Web服务的调用。但是,每次调用都是一样的,所以我假定序列化程序集只需要创建一次。为什么它第二次创建它(我假设这就是为什么csc.exe被调用)。 – AngryHacker 2010-08-18 21:19:49

+0

@AngryHacker你是否手动创建序列化程序集?如果您不是(只是正常构建项目),则序列化程序集始终在运行时创建。你是使用XmlSerializer与XmlTypeMapping还是使用XmlType? (创建序列化) – DevinB 2010-08-20 11:54:58

1

如果使用的XmlSerializer(直接或间接的,即在调用网络服务时),然后在其内部产生的临时装配用串行执行:创建基于反射信息源文件,并用CSC.EXE编译它。您可以在开发时通过SGen预生成序列化程序。