Monogame内容管道工具无法将XML数据编译到XNB

本文关键字:XML 数据 编译 XNB 管道 管道工 工具 Monogame | 更新日期: 2023-09-27 18:11:11

我是Monogame内容管道工具的新手,而XNA会自己进行编译。所以我可能遇到了一个非常简单的问题,但我找不到解决方案。这是我的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:ns="Microsoft.Xna.Framework">
  <Asset Type="Game1.Screens.SplashScreen">
    <SplashScreen>
      <Path>Images/Image1</Path>
    </SplashScreen>
  </Asset>
</XnaContent>

因此,我不完全确定<Asset Type="...">想要什么作为值,但调试器告诉我这里有一个错误:Could not resolve type 'Game1.Screens.SplashScreen'.所以这是我正在看的一个简单教程:

教程

在那里,这个人决定教授如何使用XML序列化。所以他使用的是XNA,但大部分代码也应该在Monogame上运行。无论如何,他所做的是,在Content.RootDiretory之外的文件夹中添加一个新的XML文件,并在其中添加他的XML文件。由于我从未使用Monogame发布过项目,所以如果我错了,请纠正我,但设置为Copy always to output directory的XML文件不是用户可查看/可编辑的吗?还是将其压缩为XNB?或者它甚至不会在那里展出?这就是问题的根源,现在让我们看看顶部:

由于无法回答XML文件是否真的会出现在最终产品的Content目录中,我决定使用Content pipeline工具并从那里添加上面的XML文件,因为我确信它会被转换为XNB。但现在我犯了这个错误。我不知道我错在哪里了?如果我将文件的构建操作从默认的Build设置为Copy,错误就会消失,但XML文件将在我的Content目录中,而不是XNB目录中。请提供建议。

以下是有关SplashScreen类的更多信息:它继承自另一个类GameScreen。它位于Screens中,该文件夹位于项目的文件夹中。这就是为什么我尝试使用Game1.Screens.SplashScreen,其中Game1是我的项目名称。

提前感谢!

Monogame内容管道工具无法将XML数据编译到XNB

你的直觉是正确的。教程的版本必须附带xml文件。但Xna内容管道可以将其构建成一个二进制文件,用于运送游戏,运行时内容管道可以加载到游戏中。

当它将数据加载到你的游戏中时,它需要知道数据将适合哪个类,这样它就可以将数据插入该类的实例中

Class MyGameInitialConfiguration
{
  public string path; 
  /*
   other possible game settings can be added too
   public float heroPower;
   public string badGuyName;
  */
}

//然后在xml文件中

<asset type=MyGameInitialConfiguration>

现在,由于当你点击run时,构建过程所做的第一件事就是构建assests(将fbx转换为xnb,将图像转换为xnb,将xml转换为xn(,在你点击run之前,in需要知道什么是"MyGameInitialConfiguration"。。。但是如果你把这个类添加到游戏项目中,它在需要它之前不会构建这个类,你会得到一个错误。

因此,你必须在你的解决方案中添加一个额外的项目来容纳这个类,并使你的游戏项目和内容项目依赖于它,所以它是第一个要构建的项目。然后,当游戏项目运行时,它已经知道什么是"MyGameInitialConfiguration",并可以将日期加载到其中。

显然,您可以从游戏代码中访问该类实例,并从中提取"路径">

以下是XNA knowledege的全部结束:http://www.shawnhargreaves.com/blogindex.html

特别是,这个博客:http://blogs.msdn.com/b/shawnhar/archive/2009/03/25/automatic-xnb-serialization-in-xna-game-studio-3-1.aspx

谢谢你的这个问题,让我回到了这么多年前。Xna的内容管道非常棒。