首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法从F#代码运行ILASM?

有没有办法从F#代码运行ILASM?
EN

Stack Overflow用户
提问于 2020-08-12 02:44:29
回答 1查看 155关注 0票数 3

我正在用F#做一个从( Java的一个小子集)到CIL (MSIL)的编译器,我在考虑为实际的编译部分写一些单元测试。有没有办法在生成的IL代码上运行ilasm,并从单元测试中运行.exe文件?我正在使用NUnit。

具体地说,有没有办法做到以下几点?

代码语言:javascript
复制
[<Test>]
member this.TestSimpleMain () = 
            let fileName = __SOURCE_DIRECTORY__.Replace("code", "examples\SimpleMain.cil")
            // run ilasm on fileName -> should produce ...\SimpleMain.exe
            let actualResult = // run ...\SimpleMain.exe file
            Assert.That(actualResult , Is.EqualTo("Program returned value 5!")))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-24 20:20:13

如果您想使用ilasm,请确保以IL程序集格式(CIL的文本表示形式)创建SimpleMain.cil。然后,您应该从il文件创建PE (exe/dll)文件。

下面是一个带有输出和退出代码验证的nunit测试示例:

代码语言:javascript
复制
[<Test>]
member this.TestSimpleMain() =
    // Code that creates SimpleMain.il

    let p1 = new System.Diagnostics.Process()
    p1.StartInfo.FileName <- "C:/Windows/Microsoft.NET/Framework64/v4.0.30319/ilasm.exe"
    p1.StartInfo.Arguments <- "SimpleMain.il /exe /output=SimpleMain.exe"
    p1.Start()
    p1.WaitForExit()

    let p2 = new System.Diagnostics.Process()
    p2.StartInfo.FileName <- "SimpleMain.exe"
    p2.StartInfo.RedirectStandardOutput <- true // For output verification
    p2.Start()
    p2.WaitForExit()

    let resultA = p2.ExitCode // For exit code verification
    let resultB = p2.StandardOutput.ReadToEnd() // For output verification
    Assert.That(result, Is.EqualTo(expectedResult))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63364500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档