Visual Studio 2012 for Windows Phone:Font Segoe WP无法编译

时间:2013-06-08 22:37:27

标签: c# visual-studio xna xna-4.0

我刚安装了适用于Windows Phone的Windows 8和Visual Studio Express 2012 ...但是我无法再编译包含Segoe WP类型的spritefonts的XNA项目(相同的项目使用Visual Studio成功编译) Express 2010 for Windows Phone):

<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
    <Asset Type="Graphics:FontDescription">

    <!--
    Modify this string to change the font that will be imported.
    -->
    <FontName>Segoe WP</FontName>

    <!--
    Size is a float value, measured in points. Modify this value to change
    the size of the font.
    -->
    <Size>14</Size>

    ...
</XnaContent>

上面的代码段始终会生成以下构建错误:

Error 1 Building content threw NotSupportedException: Specified method is not supported. at Microsoft.Xna.Framework.Content.Pipeline.Interop.KerningHelper.GetCharacterSpacing(Char c) at Microsoft.Xna.Framework.Content.Pipeline.Processors.FontDescriptionProcessor.Process(FontDescription input, ContentProcessorContext context) at Microsoft.Xna.Framework.Content.Pipeline.ContentProcessor'2.Microsoft.Xna.Framework.Content.Pipeline.IContentProcessor.Process(Object input, ContentProcessorContext context) at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAssetWorker(BuildItem item) at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAsset(BuildItem item) at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.RunTheBuild() at Microsoft.Xna.Framework.Content.Pipeline.Tasks.BuildContent.RemoteProxy.RunTheBuild(BuildCoordinatorSettings settings, TimestampCache timestampCache, ITaskItem[] sourceAssets, String[]& outputContent, String[]& rebuiltContent, String[]& intermediates, Dictionary'2& dependencyTimestamps, KeyValuePair'2[]& warnings)

如果我用<FontName>Segoe WP</FontName>替换<FontName>Segoe UI Mono</FontName>,则编译成功。

有没有人经历过类似的事情?有解决方法/解决方法吗?任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

此错误来自内容处理器。出于某种原因,内部GetCharacterSpacing方法不支持该字体,该方法用于确定字符的宽度。

(粗略猜测原因:2012年的构建过程可能正在使用较新版本的.NET框架 - 例如:4.5 vs 4.0 - 并且由于某些疯狂的原因,该特定方法在版本之间的工作方式不同。你可能会对MSBuild感到困惑 - 但这太费劲了。)

如果它在2010年有效,您可以直接使用在该IDE中完成的构建中生成的xnb文件。

更好的选择可能是使用Nuclex.Fonts这使用FreeType来呈现字体 - 因此它根本不需要Windows API。它也比XNA的内置处理器提供更好的结果(主要是因为它没有有损压缩其输出)。它是一个替代品 - 它读取相同的XML文件并输出相同的SpriteFont个对象。