使用 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 字体文件,然后构建成功,因为然后可以找到字体压缩到二进制文件中。
我正在玩 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.xmlBuild 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 字体文件,然后构建成功,因为然后可以找到字体压缩到二进制文件中。