我有一个生成EXE文件的c#项目。现在,我在"安全"公司环境,我可以编译我的项目,但我无法执行EXE文件。
作为一名Java程序员,我想知道是否没有办法将c#项目编译成不是EXE文件的东西,而是CIL文件然后通过对应的东西执行CIL文件dotnet世界中的java.exe。
编辑回应评论:
答案 0 :(得分:4)
嗯,这应该很容易。
.NET可执行文件就像其他任何DLL一样 - 主要的区别在于可执行格式本身,以及EXE文件有入口点,而DLL没有。
这也意味着您可以将EXE加载到内存中,就像使用DLL一样:
Assembly.LoadFrom("SomeExe.exe");
你已经到了一半 - 现在我们只需找到并执行入口点。毫不奇怪,这也非常简单:
var assembly = Assembly.LoadFrom("SomeExe.exe");
assembly.EntryPoint.Invoke(null, null);
对于大多数应用程序,这应该完全正常;对于某些人,您必须确保您用来调用入口点的主题分别为STAThread
或MTAThread
Thread.TrySetThreadApartment
开始一个新线程。)
某些应用程序可能需要调整,但它不应该太难修复。
所以你可以制作一些只包含这两行代码的引导应用程序("解释器")。如果您无法获得批准,并且您确实需要某些东西作为官方软件包,请尝试使用允许您执行任意代码的.NET应用程序 - 例如,LINQPad或PowerShell。
修改强>
当然,这确实有局限性,它确实引入了一些额外的设置工作:
Assembly.GetEntryAssembly
。这并不是经常使用的,所以它不应该是一个问题。相当多的类似问题也应该没问题,因为你构建了自己试图运行的应用程序。