【问题标题】:Trouble getting JSIL to compile无法让 JSIL 编译
【发布时间】:2023-05-23 05:52:01
【问题描述】:

我曾经尝试使用 XNA 的每个现代版本的 JSIL 都会出现这个错误。

我过去曾在任何地方寻找有关它为什么无法运行的信息,最终都会得到有关 XNA 4.0 未正确安装或其他问题的答案。

此错误在 3 台不同的计算机上重现。

我可以让一个版本的 JSIL 工作,我可以从 git 存储库 (JSIL-0.7.6) 下载其中一个版本,它可以与 XNA 一起工作,只要你不给它任何构建无法提供的东西支持。

但是这些版本现在已经有几年了。让现代构建工作会很好。

我试图提供一些猜测,但我在这里有点超出我的深度。

JSIL-0.7.6 - 不会在 AnyCPU 中构建,需要将解决方案平台设置为 x86。

最新的 JSIL git 版本 - 许多项目现在设置为 AnyCPU,将它们设置为 x86 会产生各种错误或警告混合。

所以我认为,在 JSIL 中的某些项目从 x86 支持到 64 位支持时,我可能会遇到构建问题。

我安装了 Visual Studio Express 2010 和 Visual Studio Community。

我尝试过使用 XNA 刷新之类的方法。使用 emscription、FNA 等...

在一个理想的世界里,我宁愿让 JSIL 与 monogame 一起工作,但我在任何版本的 JSIL 上都会遇到很多错误,这似乎不值得打扰。将 monogame 项目移植到 xna 并不太麻烦。

【问题讨论】:

    标签: c# xna monogame jsil


    【解决方案1】:

    Trunk JSIL 旨在使用 VS2015 社区构建。大多数依赖项已经转移到 NuGet,这意味着您需要在第一次构建之前恢复包 - VS2015 会自动为您执行此操作;在命令行中,您可能需要手动恢复 NuGet 包。

    如果您想使用 XNA 支持,您需要编译为 Debug|Any CPURelease|Any CPU。这应该仍然有效,因为 编译器 - JSILc - 现在有 32 位和 64 位目标。如果您使用 32 位目标 (Compiler.Executor.32bit),这将确保编译器在 32 位模式下运行并且 XNA 位将起作用。 32 位目标编译为JSILc.exe,64 位目标编译为JSILc.AnyCPU.exe

    就内容管道位而言,我需要查看更多日志文本来推测它为什么不工作......但一般来说,内容管道在命令行 msbuild 中不能可靠地工作。最好的办法是首先使用 Visual Studio 一次性构建游戏项目,以便正确构建所有内容,此时命令行 msbuild 会更好地处理它。

    对于 VS2015 中的 XNA,请使用 codeplex 中的 VS2013 包: https://mxa.codeplex.com/releases 在 VS2015 允许您安装之前,您可能需要编辑包内的清单,但它可以完美运行。

    使用 VS2013 构建可能会很好,但我最近没有这样做。

    如果您仍然遇到问题,请尝试通过 NoXNA 构建(Debug|NoXNA 而不是 Debug|AnyCPU)排除基础问题,并确保一切正常。验证工作构建的一种简单方法是使用 VS2015 测试运行程序运行“SimpleTests”测试套件 - 这需要相对较短的时间,并且会识别编译器或构建管道的基本问题。

    请记住,当您从命令行调用诸如 msbuild 或 csc 之类的工具时,您将获得哪个版本在某种程度上是不可预测的。 VS2015 x64 native tools command promptVS2015 x86 native tools command prompt 是两个开始菜单快捷方式,如果您有 VS2015,它们将为您提供加载正确工具的命令提示符。鉴于您已安装 VS2010,您尝试构建时可能正在使用旧版本的 msbuild 和/或 csc。

    【讨论】:

    • 感谢 Katelyn,很棒的帖子。
    • 我主要为 XNA 安装了 express 2010。我卸载了所有东西(XNA、VS Express 2010、VS 2013)我安装了 VS 2015,对于 XNA 我下载了这个版本mxa.codeplex.com/releases/view/117230 我设法用 Visual Studio 2015 安装了它,这要归功于这篇文章的最佳答案:*.com/questions/28008970/… Red解决方案有错误,但如果我按照你说的直接指向 exe,它现在可以工作了。现在我必须弄清楚我现在应该如何获得内容清单,因为内容没有构建。
    • 我运行了所有测试。 27 次通过,256 次失败,我猜这很糟糕?失败的有三个 SimpleTest。
    • 从更多修补中更新。我不知道为什么测试失败,忽略。我不认为他们在传递准确的信息。在另一台电脑上测试,他们工作。在最新的 git 版本上我无法克服的一件事,我不断收到与未定义 XNA 颜色有关的异常,我发现它不像以前那样构建 XNAcolor.js,所以我从旧版本中添加它并将其读取到显现。我最终得到错误:不平衡的画布保存/恢复。从非预设 RBG 值生成所有 XNA 颜色也会引发不同的错误,但行相同。