我有一个生成EXE文件的C#项目。现在,我处于一个“安全”的企业环境中,可以编译我的项目,但无法执行EXE文件。
作为一名Java程序员,我想知道是否有一种方法将C#项目编译成不是EXE文件而是CIL文件,然后通过在dotnet世界中对应于java.exe的东西来执行CIL文件。
根据评论进行的编辑:
1. 我可以运行由包管理器安装的exe文件
2. 是的,我知道企业政策很愚蠢。
这应该很容易。
.NET可执行文件就像其他DLL一样-主要区别在于可执行文件的格式本身以及EXE文件具有入口点,而DLL没有。
这也意味着您可以像加载DLL一样将EXE加载到内存中:
Assembly.LoadFrom("SomeExe.exe");
您已经完成了一半 - 现在我们只需要找到并执行入口点。毫不意外,这也非常简单:
var assembly = Assembly.LoadFrom("SomeExe.exe");
assembly.EntryPoint.Invoke(null, null);
STAThread
或 MTAThread
(如果您正在启动新线程,则使用 Thread.TrySetThreadApartment
)。Assembly.GetEntryAssembly
。这并不经常使用,因此不应该成为问题。由您自己构建要运行的应用程序的许多类似问题也应该没问题。Assembly.Load("SomeExe.exe")
?OP 无法在他的环境中运行任意可执行文件。你将如何调试 SomeExe.exe
?你将如何从 Visual Studio 启动它? - CodeCasterSomeExe.exe
,也可以从VS自动启动它。 - Luaan