我有一个WinForm应用程序。我编译它,双击它。可以预料的是,csc.exe会启动,然后消失,应用程序出现。为什么C#编译器第二次启动?
我假设在这一点上的应用程序已实时编译,所以没有理由CSC.EXE在以后再踹。
然后我退出应用程序并重新启动它。我看到csc.exe再次启动。
发生了什么事?
我有一个WinForm应用程序。我编译它,双击它。可以预料的是,csc.exe会启动,然后消失,应用程序出现。为什么C#编译器第二次启动?
我假设在这一点上的应用程序已实时编译,所以没有理由CSC.EXE在以后再踹。
然后我退出应用程序并重新启动它。我看到csc.exe再次启动。
发生了什么事?
你是否在使用序列化?我相信在某些情况下会建立一个临时议会。你的应用中有类似的东西吗?
注意,JIT编译器是无关的CSC,所以这不应该是什么关系呢。
@Downvoter:谨慎评论?为什么这是一个这么愚蠢的想法? – 2010-08-18 21:02:04
我的错误!意外点击!已经撤消!抱歉! – Timwi 2010-08-18 21:03:58
@Timwi:Goodo :) – 2010-08-18 21:04:15
如果您使用序列化需要,以创建所需的类编译动态组装。
这意味着大多数webservice调用都会导致第一次调用csc.exe。之后,动态DLL应该是缓存。
有对Web服务的调用。但是,每次调用都是一样的,所以我假定序列化程序集只需要创建一次。为什么它第二次创建它(我假设这就是为什么csc.exe被调用)。 – AngryHacker 2010-08-18 21:19:49
@AngryHacker你是否手动创建序列化程序集?如果您不是(只是正常构建项目),则序列化程序集始终在运行时创建。你是使用XmlSerializer与XmlTypeMapping还是使用XmlType? (创建序列化) – DevinB 2010-08-20 11:54:58
如果使用的XmlSerializer(直接或间接的,即在调用网络服务时),然后在其内部产生的临时装配用串行执行:创建基于反射信息源文件,并用CSC.EXE编译它。您可以在开发时通过SGen预生成序列化程序。
@Timwi。通过双击,我的意思是我启动我的app.exe。它不在IDE内部。 – AngryHacker 2010-08-18 21:03:57