Monogame 内容管道工具无法将 XML 数据编译为 XNB
Monogame content pipeline tool failing to compile XML data to XNB
我是 Monogame 内容管道工具的新手,与 XNA 不同,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 文件不会是 user-viewable/editable 吗?还是会压缩成XNB?或者它甚至不会出现在那里?这就是问题的根源,现在让我们看看顶部:
由于无法自己回答 XML 文件是否会实际出现在最终产品的内容目录中,我决定使用内容管道工具并从那里添加上面的 XML 文件因为我确信它会被转换成 XNB。但是现在我得到了这个错误。而且我不知道我哪里错了?如果我将文件的构建操作从默认的 Build
设置为 Copy
,错误就会消失,但 XML 文件将位于我的内容目录中,而不是 XNB 目录中。请指教
这里有一些关于 SplashScreen
class 的更多信息:
它继承自另一个 class、GameScreen
。
它位于项目文件夹内的 Screens
文件夹内。这就是我尝试使用 Game1.Screens.SplashScreen
的原因,其中 Game1
是我的项目名称。
提前致谢!
您的直觉是正确的。教程版本必须将游戏与 xml 文件一起发布。但是 Xna 内容管道可以将它构建成一个二进制文件来传送您的游戏,并且 运行time 内容管道可以将它加载到您的游戏中。
当它加载到您的游戏中时,它需要知道 class 数据将适合什么,以便它可以将数据插入到 class
的实例中
Class MyGameInitialConfiguration
{
public string path;
/*
other possible game settings can be added too
public float heroPower;
public string badGuyName;
*/
}
//然后在xml文件中
<asset type=MyGameInitialConfiguration>
现在,由于当您点击 运行 时构建过程所做的第一件事是构建资产(将 fbx 转换为 xnb,将图像转换为 xnb,将您的 xml 转换为 xnb),在在你点击 运行 之前需要知道 "MyGameInitialConfiguration" 是什么......但是如果你将这个 class 添加到游戏项目中,它不会构建 class 直到它需要它,你会得到一个错误。
因此您实际上必须向您的解决方案添加一个额外的项目来容纳此 class 并使您的游戏项目和内容项目依赖于它,因此它是第一个要构建的项目。然后到游戏项目 运行s 时,它知道 "MyGameInitialConfiguration" 是什么并且可以将日期加载到其中。
显然,您可以从游戏代码访问 class 实例并从中提取 "path"。
XNA 知识到此结束:http://www.shawnhargreaves.com/blogindex.html
谢谢你提出这个问题,让我回到了这么多年。 Xna 内容管道很棒。
我是 Monogame 内容管道工具的新手,与 XNA 不同,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 文件不会是 user-viewable/editable 吗?还是会压缩成XNB?或者它甚至不会出现在那里?这就是问题的根源,现在让我们看看顶部:
由于无法自己回答 XML 文件是否会实际出现在最终产品的内容目录中,我决定使用内容管道工具并从那里添加上面的 XML 文件因为我确信它会被转换成 XNB。但是现在我得到了这个错误。而且我不知道我哪里错了?如果我将文件的构建操作从默认的 Build
设置为 Copy
,错误就会消失,但 XML 文件将位于我的内容目录中,而不是 XNB 目录中。请指教
这里有一些关于 SplashScreen
class 的更多信息:
它继承自另一个 class、GameScreen
。
它位于项目文件夹内的 Screens
文件夹内。这就是我尝试使用 Game1.Screens.SplashScreen
的原因,其中 Game1
是我的项目名称。
提前致谢!
您的直觉是正确的。教程版本必须将游戏与 xml 文件一起发布。但是 Xna 内容管道可以将它构建成一个二进制文件来传送您的游戏,并且 运行time 内容管道可以将它加载到您的游戏中。
当它加载到您的游戏中时,它需要知道 class 数据将适合什么,以便它可以将数据插入到 class
的实例中Class MyGameInitialConfiguration
{
public string path;
/*
other possible game settings can be added too
public float heroPower;
public string badGuyName;
*/
}
//然后在xml文件中
<asset type=MyGameInitialConfiguration>
现在,由于当您点击 运行 时构建过程所做的第一件事是构建资产(将 fbx 转换为 xnb,将图像转换为 xnb,将您的 xml 转换为 xnb),在在你点击 运行 之前需要知道 "MyGameInitialConfiguration" 是什么......但是如果你将这个 class 添加到游戏项目中,它不会构建 class 直到它需要它,你会得到一个错误。
因此您实际上必须向您的解决方案添加一个额外的项目来容纳此 class 并使您的游戏项目和内容项目依赖于它,因此它是第一个要构建的项目。然后到游戏项目 运行s 时,它知道 "MyGameInitialConfiguration" 是什么并且可以将日期加载到其中。
显然,您可以从游戏代码访问 class 实例并从中提取 "path"。
XNA 知识到此结束:http://www.shawnhargreaves.com/blogindex.html
谢谢你提出这个问题,让我回到了这么多年。 Xna 内容管道很棒。