解决XNA内容加载器InvalidOperationException?

时间:2013-03-07 01:12:57

标签: c# xna-4.0

我发现StackOverflow在过去是一个非常有用的参考,现在我已经遇到了自己的障碍,我想我会试着在这里发帖。

我的问题是,每当我的游戏尝试加载SoundEffect文件时,它都会因InvalidOperationException崩溃(详细消息:发生意外错误)。这个游戏是在XNA 4.0框架上编写的,在C#中使用Visual Studio 2010 express作为我的IDE。正在加载的声音效果都是.wav文件,并被添加到游戏的内容项目中。

我检查了电路板并尝试了以下建议:

  • 确认它设置的content.rootDirectory - 它设置为“Content”
  • 确认content.load<>正在通过正确的路径访问资源。使用反射,我获得了应用程序的当前目录,然后使用了rootdirectory +它尝试访问的路径。该文件肯定存在,可访问,并且位于该位置。
  • 确保ContentManager内容不为空 - 使用调试确认,无论如何都会抛出不同的异常。
  • 确认WAV是8位或16位PCM。确认。
  • 可能的标头损坏?我试图加载的任何和所有声音效果都会出现此错误,因此它不是与一个文件有关的标题问题。

奇怪的是,这个错误似乎无处不在。它在过去一周没有问题,今天它变得非常糟糕 - 而且我没有做任何会影响内容加载过程的更改。

以下是抛出错误的代码:

public void LoadSoundEffect(ContentManager content, String assetPath)
{
    if (content != null && String.IsNullOrEmpty(assetPath) == false)
    {
        // This next line throws the exception.
        SoundEffect effectLoader = content.Load<SoundEffect>(assetPath);
        soundLibrary.Add(assetPath, effectLoader);
    }
}

这是堆栈跟踪:

  

at Microsoft.Xna.Framework.Helpers.ThrowExceptionFromErrorCode(Int32 error)   在Microsoft.Xna.Framework.Audio.SoundEffect.AllocateFormatAndData(Byte [] format,Byte []&gt; data,Int32 offset,Int32 count)   在Microsoft.Xna.Framework.Audio.SoundEffect.Create(Byte []格式,Byte []数据,Int32    offset,Int32 count,Int32 loopStart,Int32 loopLength,TimeSpan duration)   在Microsoft.Xna.Framework.Audio.SoundEffect..ctor(Byte []格式,字节[]数据,Int32    loopStart,Int32 loopLength,TimeSpan duration)   在Microsoft.Xna.Framework.Content.SoundEffectReader.Read(ContentReader输入,    SoundEffect现有实例)   在Microsoft.Xna.Framework.Content.ContentReader.InvokeReader [T](ContentTypeReader    读者,对象现有实例)   在Microsoft.Xna.Framework.Content.ContentReader.ReadObjectInternal [T](对象    existingInstance)   在Microsoft.Xna.Framework.Content.ContentReader.ReadObjectT   在Microsoft.Xna.Framework.Content.ContentReader.ReadAssetT   在Microsoft.Xna.Framework.Content.ContentManager.ReadAsset [T](String assetName,    Action`1 recordDisposableObject)   在Microsoft.Xna.Framework.Content.ContentManager.Load [T](String assetName)   在SerializableDataTypes.AudioManager.LoadSoundEffect(ContentManager content,String    asset:)在C:\ Users \ Mike \ Documents \ Visual Studio 2010 \ Projects \ Res Judicata中    第1章\ SerializableDataTypes \ Script Elements \ AudioManager.cs:第78行

提前感谢您提供的任何帮助 - 我对此感到非常难过,这是一个非常令人沮丧的错误。

1 个答案:

答案 0 :(得分:0)

出于好奇心的缘故,您是否可以稍微尝试加载声音效果。

SoundEffect effect = content.Load<SoundEffect>(String.Format(@"{0}", soundEffectPath))

过去我在使用字符串文字时加载某些内容类型时遇到了问题。