monogame 内容加载文件未找到异常

Posted

技术标签:

【中文标题】monogame 内容加载文件未找到异常【英文标题】:monogame content load file not found exception 【发布时间】:2013-05-21 06:11:23 【问题描述】:

以下post 看起来与我的问题相似,但最终它在所有细节上看起来并不完全相同,所以我提出这一点是为了防止有人声称它是相同的。

我在 Xamarin Studio 中关注此 monogame tutorial(目前在第 2 步):

当我在第 2 步结束时运行生成的单人游戏应用程序时,当我点击尝试加载播放器内容的代码行时,我得到以下异常(粘贴在末尾)。我已正确设置播放器内容文件 AFAIK,将其复制到输出文件夹,但我假设它以某种方式未正确部署到 Andriod 虚拟机 (AVM),我无法做到弄清楚如何检查部署的内容。我打开了 android Monitor 来探索 AVM 并试图找出东西在哪里,但我没有任何运气弄清楚... 找不到文件异常似乎很清楚 AVM 上运行的东西不是找到内容文件...但我不知道如何更正。

任何帮助将不胜感激,谢谢!

我遇到此问题的来源和项目是 here

我看到的异常如下: [MonoDroid] 未处理的异常:Microsoft.Xna.Framework.Content.ContentLoadException:无法将 Graphics\player 资源加载为非内容文件! ---> Microsoft.Xna.Framework.Content.ContentLoadException:打开流错误。 ---> Java.IO.FileNotFoundException:抛出了“Java.IO.FileNotFoundException”类型的异常。 [MonoDroid] 在 Android.Runtime.JNIEnv.CallObjectMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue[] parms) [0x00000] 在:0 [MonoDroid] 在 Android.Content.Res.AssetManager.Open (System.String文件名)[0x00000] in :0 [MonoDroid] at Microsoft.Xna.Framework.TitleContainer.OpenStream(System.String 名称)[0x00000] in :0 [MonoDroid] at Microsoft.Xna.Framework.Content.ContentManager.OpenStream(System .String assetsName) [0x00000] in :0 [MonoDroid] --- 托管异常堆栈跟踪结束 --- [MonoDroid] java.io.FileNotFoundException: Content/Graphics/player.xnb [MonoDroid] at android.content.res .AssetManager.openAsset(Native Method) [MonoDroid] at android.content.res.AssetManager.open(AssetManager.java:315) [MonoDroid] at android.content.res.AssetManager.open(AssetManager.java:289) [MonoDroid ] 在 mono.java.lang.RunnableImplementor.n_run(Native Method) [MonoDroid] 在 mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:29) [MonoDroid] 在 android.os.Handler.handleCallba ck(Handler.java:605) [MonoDroid] 在 android.os.Handler.dispatchMessage(Handler.java:92) [MonoDroid] 在 android.os.Looper.loop(Looper.java:137) [MonoDroid] 在 android。 app.ActivityThread.main(ActivityThread.java:4424) [MonoDroid] 在 java.lang.reflect.Method.invokeNative(Native Method) [MonoDroid] 在 java.lang.reflect.Method.invoke(Method.java:511) [ MonoDroid] 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) [MonoDroid] 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) [MonoDroid] 在 dalvik .system.NativeStart.main(Native Method) [MonoDroid] [MonoDroid] --- 内部异常堆栈跟踪结束 --- Microsoft.Xna.Framework.Content.ContentManager.OpenStream (System.String assetsName) [MonoDroid] 0x00000] 在 :0 [MonoDroid] 在 Microsoft.Xna.Framework.Content.ContentManager.ReadAsset[Texture2D] (System.String 资产名称,System.Action1 recordDisposableObject) [0x00000] 在 :0 [MonoDroid] --- 内部异常堆栈跟踪结束 --- [MonoDroid] 在 Microsoft.Xna.Framework.Content.ContentManager.ReadAsset (string,System.Action1) [MonoDroid] 在 Microsoft.Xna.Framework.Content.ContentManager.Load (string) [MonoDroid] 在SampleShooter.Game1.LoadContent () [MonoDroid] 在 Microsoft.Xna.Framework.Game.Initialize () [MonoDroid] 在 SampleShooter.Game1.Initialize () [MonoDroid] 在 Microsoft.Xna。 Framework.Game.DoInitialize () [MonoDroid] 在 Microsoft.Xna.Framework.AndroidGamePlatform.BeforeUpdate (Microsoft.Xna.Framework.GameTime) [MonoDroid] 在 Microsoft.Xna.Framework.Game.DoUpdate (Microsoft .Xna.Framework.GameTime) [MonoDroid] 在 Microsoft.Xna.Framework.Game.Tick () [MonoDroid] 在 Microsoft.Xna.Framework.AndroidGameWindow.OnUpdateFrame (OpenTK.FrameEventArgs) [ MonoDroid] 在 OpenTK.Platform.Android.AndroidGameView.UpdateFrameInternal (OpenTK.FrameEventArgs) [MonoDroid] 在 OpenTK.Platform.Android.AndroidGameView.RunIt eration (System.Threading.CancellationToken) [MonoDroid] 在 OpenTK.Platform.Android.AndroidGameView/c__AnonStorey0.m__2 (object) [MonoDroid] 在 Android.App.SyncContext/c__AnonStorey2F.m__1A ( ) [MonoDroid] at Java.Lang.Thread/RunnableImplementor.Run () [MonoDroid] at Java.Lang.IRunnableInvoker.n_Run (intptr,intptr) [MonoDroid] at (wrapper dynamic-method ) object.e85befee-f4e0-4f15-9232-77621081c7b5 (intptr,intptr) [mono] [mono] 未处理异常:[mono] Microsoft.Xna.Framework.Content.ContentLoadException:无法将 Graphics\player 资源加载为一个非内容文件! ---> Microsoft.Xna.Framework.Content.ContentLoadException:打开流错误。 ---> Java.IO.FileNotFoundException:抛出了“Java.IO.FileNotFoundException”类型的异常。 [单声道] 在 Android.Runtime.JNIEnv.CallObjectMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue[] parms) [0x00000] 在 :0 [单声道] 在 Android.Content.Res.AssetManager.Open (System.String文件名)[0x00000] 在 Microsoft.Xna.Framework.TitleContainer.OpenStream 的 0 [单声道] 中(System.String 名称) [0x00000] 在 Microsoft.Xna.Framework.Content.ContentManager.OpenStream 的 0 [单声道] 中(系统.String assetsName) [0x00000] in :0 [mono] --- 托管异常堆栈跟踪结束 --- [mono] java.io.FileNotFoundException: Content/Graphics/player.xnb [mono] at android.content.res .AssetManager.openAsset(Native Method) [mono] at android.content.res.AssetManager.open(AssetManager.ja [mono] [ERROR] FATAL UNHANDLED EXCEPTION: Microsoft.Xna.Framework.Content.ContentLoadException: 无法加载 Graphics\播放器资产作为非内容文件!---> Microsoft.Xna.Framework.Content.ContentLoadException:打开流错误。---> Java.IO.FileNotFoundException:“Java.IO.FileNotFoundException”类型的异常被抛出。 [单声道] 在 Android.Runtime.JNIEnv.CallObjectMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue[] parms) [0x00000] 在 :0 [单声道] 在 Android.Content.Res.AssetManager.Open (System.String文件名)[0x00000] 在 Microsoft.Xna.Framework.TitleContainer.OpenStream 的 0 [单声道] 中(System.String 名称) [0x00000] 在 Microsoft.Xna.Framework.Content.ContentManager.OpenStream 的 0 [单声道] 中(系统.String assetsName) [0x00000] in :0 [mono] --- 托管异常堆栈跟踪结束 --- [mono] java.io.FileNotFoundException: Content/Graphics/player.xnb [mono] at android.content.res .AssetManager.openAsset(Native Method) [mono] at android.content.res.AssetManager.open(As

【问题讨论】:

【参考方案1】:

所以我最终发现我需要将 XNB 文件标记为构建操作的 AndroidAsset,而不是示例所述的内容。由于我下面的示例是针对 Windows Mobile 开发的,这是有道理的,因为该文件通常会被标记为 Windows 应用程序的内容,而对于 Android,这些文件需要标记为 AndriodAsset 才能使 XNA 能够访问原始内容数据,无论文件是在内容文件夹还是资产文件夹中。内容管理器的根文件夹默认是“Content”,所以你需要在里面添加文件并将其标记为资产,而不是内容...

【讨论】:

【参考方案2】:

android monogame 项目的内容应该作为构建的 .xnb 文件添加到 Assets/Content 文件夹中的项目中,而不是仅仅复制到输出目录中

【讨论】:

感谢@bruinbrown,它已经添加到项目的内容文件夹中并作为构建的一部分复制,而不是由我手动复制。所以这不是问题:) 还有其他想法吗?

以上是关于monogame 内容加载文件未找到异常的主要内容,如果未能解决你的问题,请参考以下文章

无法将 .fbx 从搅拌机正确加载到 Monogame

未处理的异常: 未能加载文件或程序集

如何从Blender导出fbx纹理以用于Monogame

IBM的内容导航器插件JAR文件未找到

Android MonoGame坑记

文件未找到存在的文本文件异常