编辑:这个问题现在已经解决了,我在这里包括细节来帮助遇到这个问题的任何人,因为解决起来并不简单。
基本上,它归结为使用开发分支进行更新。
第一步是检查monogame开发分支,这将不包括thirdparty/libs子模块,因此您还需要更新它以便能够编译源代码。
在此之后,您可以编译 MonoGame.Framework.Linux.sln,并更新项目中的引用以指向新的 dll 文件。
这仍然不会加载效果文件,除非它们是使用最新版本的内容处理器创建的,因此您需要转到 Windows 计算机,检查开发分支(和库) - 或从您的 linux 复制它们system - 然后编译 MonoGame.ContentPipeline/ContentProcessors/MonoGameContentProcessors.sln
您需要在内容项目中更新对 MonoGameContentProcessors.dll 的引用,还需要将 MonoGame.ContentPipeline\ContentProcessors\bin\Release\libmojoshader_32.dll 文件重命名为 libmojoshader.dll。
完成所有这些后,您终于可以按预期使用它了 - 从您的 .fx 文件构建 .xnb 文件并将它们添加到 linux 项目中。
希望这些信息对某人有用。
==================================================原创邮政:
我刚刚开始使用 MonoGame,并试图让一个非常简单的应用程序(旋转立方体)在 Windows 和 Linux 上工作 - Windows 没有被证明是一个问题,但我无法让我的 .fx 文件工作Linux。
我已经建立了一个“MonoGame 内容项目”,向其中添加了 .fx 文件,选择了“MonoGame Effect”处理器,将构建配置设置为 Linux - 这一切似乎都有效,我在输出目录中获得了一个 .xnb 文件.
当我设置Linux项目时,我将.xnb复制到“内容”文件夹(根目录已相应设置)并使用以下代码加载效果(与windows上的代码相同):
CubeEffect = Content.Load<Effect>("Effect1");
CubeEffect.CurrentTechnique = CubeEffect.Techniques["Technique1"];
这会导致应用程序崩溃并出现以下错误:
Microsoft.Xna.Framework.Content.ContentLoadException: Could not load Effect1 asset!
最初我认为这是文件名、目录名或某些不正确设置的问题。但是,我尝试将 .png 文件添加到内容文件夹并加载:
Texture2D Tex = Content.Load<Texture2D>("bg.png");
这工作得很好(在调试器中检查了 Texture2D 的属性,并且它具有正确的文件详细信息)。
转换着色器文件时我是否错过了某个步骤?有什么我没有看到的非常明显的东西吗?
如果没有,有没有人知道它为什么会这样,或者有什么方法可以从中得到更详细的错误,比如它无法加载资产的实际原因?
编辑:查看了反汇编中实际引发错误的点后,它似乎找到了文件,但没有将其识别为任何有效的资源类型——这可能是某种版本/兼容性问题吗?