2

我试图在 Shawn Hargreaves 博客上实现类似于外部引用示例的东西

http://blogs.msdn.com/b/shawnhar/archive/2008/08/12/everything-you-ever-wanted-to-know-about-intermediateserializer.aspx

我遇到的问题是,当 VS 尝试编译 xml 文件时,它会抛出一个错误,例如

错误 1 ​​构建内容引发 ArgumentException:外部引用“C:\Work\Company\Project\trunk\Project.Content\Sprites\Effects\EffectsSprite.tga”不是已编译的 .xnb 文件。在 Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentWriter.WriteExternalReference[T](ExternalReference 1 reference) at Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ExternalReferenceWriter1.Write(ContentWriter 输出,ExternalReference1 value) at Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentTypeWriter1.Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentWriter.InvokeWriter[T](T value, ContentTypeWriter writer) 在 Microsoft.Xna.Framework.Content.Pipeline.Serialization 中写入(ContentWriter output, Object value) .Compiler.ContentWriter.WriteObject[T](T 值) 在 Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentWriter.WriteSharedResources() 在 Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentWriter。 Microsoft.Xna.Framework.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentCompiler.Compile 的 FlushOutput()(流输出,对象值,TargetPlatform targetPlatform,GraphicsProfile targetProfile,Boolean compressContent,String rootDirectory,String referenceRelocationPath)在 Microsoft.Xna.Framework。 Content.Pipeline.BuildCoordinator。Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.SerializeAsset(BuildItem item, ObjectassetData) 在 Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAssetWorker(BuildItem item) 的 SerializeOutputAsset(BuildItem item, ObjectassetData, String outputFilename)在 Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAsset(BuildItem item) 在 Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.RunTheBuild() 在 Microsoft.Xna.Framework.Content.Pipeline.Tasks.BuildContent.RemoteProxy .RunTheBuild(BuildCoordinatorSettings 设置, TimestampCache timestampCache, ITaskItem[] sourceAssets, String[]& outputContent, String[]& rebuiltContent, String[]& 中间体, DictionaryMicrosoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAssetWorker(BuildItem item) 在 Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAsset(BuildItem item) 在 Microsoft.Xna 的 BuildCoordinator.SerializeAsset(BuildItem item, ObjectassetData) .Framework.Content.Pipeline.BuildCoordinator.RunTheBuild() 在 Microsoft.Xna.Framework.Content.Pipeline.Tasks.BuildContent.RemoteProxy.RunTheBuild(BuildCoordinatorSettings 设置, TimestampCache timestampCache, ITaskItem[] sourceAssets, String[]& outputContent, String[ ]& rebuiltContent, String[]& 中间体, 字典Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAssetWorker(BuildItem item) 在 Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAsset(BuildItem item) 在 Microsoft.Xna 的 BuildCoordinator.SerializeAsset(BuildItem item, ObjectassetData) .Framework.Content.Pipeline.BuildCoordinator.RunTheBuild() 在 Microsoft.Xna.Framework.Content.Pipeline.Tasks.BuildContent.RemoteProxy.RunTheBuild(BuildCoordinatorSettings 设置, TimestampCache timestampCache, ITaskItem[] sourceAssets, String[]& outputContent, String[ ]& rebuiltContent, String[]& 中间体, 字典Microsoft.Xna.Framework.Content.Pipeline.Tasks.BuildContent.RemoteProxy.RunTheBuild(BuildCoordinatorSettings settings, TimestampCache timestampCache, ITaskItem[] sourceAssets , String[]& outputContent, String[]& rebuiltContent, String[]& 中间体, DictionaryMicrosoft.Xna.Framework.Content.Pipeline.Tasks.BuildContent.RemoteProxy.RunTheBuild(BuildCoordinatorSettings settings, TimestampCache timestampCache, ITaskItem[] sourceAssets , String[]& outputContent, String[]& rebuiltContent, String[]& 中间体, Dictionary2& dependencyTimestamps, KeyValuePair2[]& 警告)C:\Work\Company\Project\trunk\Project.Content\Sprites\Effects\AtlasAuto.xml 项目

我应该如何处理 Xml 文件引用的文件?鉴于它与 xml 文件位于同一文件夹中,我尝试:

  1. 包含在内容项目中并使用 Texture - XNA 框架对其进行处理,
  2. 将其从项目中排除并
  3. 不要构建文件,而只是将其作为内容复制...

似乎没有任何效果。我想知道该示例是否适用于 XNA4,或者是否适用于 XNA3,并且他们改变了它在 XNA4 上的工作方式......

任何想法?

4

2 回答 2

0

很难说没有看到 XML 和项目布局,但我相信它可能是这样的:

您的方法看起来不错,但问题是您还需要构建此纹理文件。ExternalReference 可以指向源文件(例如 .jpg 或 .fx),也可以指向已编译的 .xnb 文件。通常,您希望在管道开始时进入的数据指向源文件,但从另一端出来的数据需要指向已编译的 .xnb 文件,因此可以将这些文件加载​​到您的游戏中。完成此操作的最常见方法是使用自定义处理器,该处理器接收对源资产的引用,要求编译此资产,并将引用更改为指向其编译后的版本。例如(在处理器中): material.Texture = context.BuildAsset<TextureContent, TextureContent>(material.Texture, "TextureProcessor");

此处引用(在第二篇文章中): http ://forums.create.msdn.com/forums/t/44917.aspx

于 2012-01-17T05:22:47.803 回答
0

我怀疑 xml 内容中的外部引用不能指向源资产。

  1. 确保被引用的项目也包含在内容项目中。
  2. 不要在其名称中包含文件扩展名。
  3. 它的路径应该是相对于 xml 文件的位置(我不是 100% 确定,如果它没有找到它,也尝试相对于内容项目的根目录)。
于 2013-10-15T19:38:30.110 回答