使用 MGCB 处理字体时路径无效

Invalid Path while processing Font with MGCB

我正在玩 Monogame,无法添加字体。 使用 MonoGame 管道工具添加字体时,我无法再构建我的项目。

Visual studio 停止并出现以下错误:

Der Befehl ""C:\Program Files (x86)\MSBuild\MonoGame\v3.0\Tools\MGCB.exe" /@:"C:\dev\Mini\Mini\Content\Content.mgcb" /platform:Windows /outputDir:"C:\dev\Mini\Mini\Content\bin\Windows" /intermediateDir:"C:\dev\Mini\Mini\Content\obj\Windows" /quiet" wurde mit dem Code 1 beendet. 'FontDescriptionProcessor' had unexpected

(抱歉,是德语,但我想你能理解这个问题;))

当我执行错误抛出命令时,我得到了一个更有帮助的错误:

C:\dev\Mini\Mini\Content>"C:\Program Files (x86)\MSBuild\MonoGame\v3.0\Tools\MGCB.exe" /@:"C:\dev\Mini\Mini\Content\Content.mgcb" /platform:Windows /outputDir:"C:\dev\Mini\Mini\Content\bin\Windows" /intermediateDir:"C:\dev\Mini\Mini\Content\obj\Windows" Build started 07.08.2015 23:15:43

Skipping C:/dev/Mini/Mini/Content/Game/Character.PNG Skipping C:/dev/Mini/Mini/Content/SplashScreen/splashScreenGame.png Skipping C:/dev/Mini/Mini/Content/Game/Background.PNG C:/dev/Mini/Mini/Content/fonts/default.spritefont C:/dev/Mini/Mini/Content/fonts/default.spritefont: error: Processor 'FontDescriptionProcessor' had unexpected failure! System.ArgumentException: Illegales Zeichen im Pfad. bei System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional) bei System.IO.Path.IsPathRooted(String path)
bei Microsoft.Xna.Framework.Content.Pipeline.Processors.FontDescriptionProcessor.FindFontFileFromFontName(String fontName, String fontDirectory) bei Microsoft.Xna.Framework.Content.Pipeline.Processors.FontDescriptionProcessor.Process(FontDescription input, ContentProcessorContext context) bei Microsoft.Xna.Framework.Content.Pipeline.ContentProcessor`2.Microsoft.Xna.Framework.Content.Pipeline.IContentProcessor.Process(Object input, ContentProcessorContext context) bei MonoGame.Framework.Content.Pipeline.Builder.PipelineManager.ProcessContent(PipelineBuildEvent pipelineEvent)Skipping C:/dev/Mini/Mini/Content/SplashScreen/SplashScreen.xml Skipping C:/dev/Mini/Mini/Content/Game/Game.xml

Build 3 succeeded, 1 failed.

Time elapsed 00:00:00.19.

我明白了,路径 C:/dev/Mini/Mini/Content/fonts/default.spritefont 无效,但我没有看到任何无效字符。 .spritefont 文件是使用 MonoGame 工具生成的,而不是导入的。我错过了什么吗?

我在 Windows 10,MonoGame 管道工具的版本是 3.5.0.465,MGCB.exe 的版本也是 3.5.0.465。

编辑:当我自己检查路径时,一切看起来都正常,将整个项目移动到另一个硬盘根本没有帮助。

Edit2:好的。看起来这不是我的字体路径。它是从注册表加载的路径。 FindFontFileFromFontName 方法 returns ARIAL.TTF[=13=][=13=][=13=][=13=][=13=][=13=] 内的行 registryKey.GetValue(current).ToString();。我会调查并更新这个问题或做出回答。

经过测试我找到了解决方案(或者我发现了问题...): 我的注册表中的某些字体路径已损坏。具有大写日期值的字体会引发错误。当您遇到类似问题时,请查看 "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"l 下的注册表,检查您选择的字体或将其更改为其他字体。我希望这个解决方案也能帮助你。 (当有人知道为什么我的注册表数据被损坏时,请告诉我。)

我有这个错误,因为 spritefont 文件只是一个字体元数据定义文件,而不是实际的字体,我仍然在 Windows 中手动安装了 TTF 字体文件,然后构建成功,因为然后可以找到字体压缩到二进制文件中。