【发布时间】:2016-08-22 23:45:51
【问题描述】:
我在使用 Monogame v3.5 内容管道工具为游戏构建一些 XML 文件时遇到问题。我有两个专门用于数据的项目——一个用于通用数据类,一个用于特定数据类——然后我将其引用到我的游戏中。
所有使用“通用”数据类的 XML 文件都能正确构建,但使用游戏特定数据类的 XML 文件却不能。我在我的 .mgcontent 项目中添加了对两个项目 dll 的引用;此外,游戏特定数据项目引用通用数据项目。
使用管道工具构建时出现以下错误:
Importer 'XmlImporter' 出现意外失败! Microsoft.Xna.Framework.Content.Pipeline.InvalidContentException:无法解析类型“SpaceCardGameData.SpaceBackgroundData”
上述失败文件的Xml文件是:
<XnaContent>
<Asset Type="SpaceCardGameData.SpaceBackgroundData">
<AsteroidTextureAssets>
<Item>Objects\Asteroids\TinyAsteroid</Item>
<Item>Objects\Asteroids\SmallAsteroid</Item>
<Item>Objects\Asteroids\LargeAsteroid</Item>
<Item>Objects\Asteroids\HugeAsteroid</Item>
</AsteroidTextureAssets>
</Asset>
</XnaContent>
.cs 文件是:
namespace SpaceCardGameData
{
public class SpaceBackgroundData : BaseData
{
public List<string> AsteroidTextureAssets { get; set; }
}
}
(Base Data 是“通用”项目中的一个空类,我只是用作模板等的基本类型)。
有谁知道为什么一个项目的 XML 文件可以工作,而另一个项目却不行。如果你还想看什么,我会上传。谢谢。
【问题讨论】:
-
在下面的帖子中查看我的解决方案。查看属性“XmlInclude”:stackoverflow.com/questions/32700342/…
-
您的答案似乎与 MonoGame 内容管道无关,只是通用 XML 反序列化。我也不认为数据文件应该有任何标记属性,我认为这不是导致错误的原因 - 管道找不到游戏特定数据“SpaceCardGameData.SpaceBackgroundData”类型,而不是 BaseData类。
-
我不知道 MonoGame,但我怀疑 MonoGame 使用的是标准的 Net 序列化并进行了一些增强。
-
正如我所说,我相信这不是我的 XML 或 .cs 文件的格式问题,因为一组 XML 数据文件可以正常工作。与不起作用的集合的唯一区别是它们在不同的项目中,这让我怀疑我在某处缺少引用。
-
'type' 属性可能是问题所在。它与我引用的帖子中的 XmlInclude 属性有关。类型需要与 BaseData 类一致。