MonoDevelop / MonoDroid项目/构建错误:不是有效的base-64字符串

时间:2012-04-15 09:27:25

标签: c# monodevelop xamarin.android

我下载了MonoDroid开发环境。如果我创建一个新的'Mono for Android Application'项目或者我在MonoDevelop中导入一个示例项目,我会立即得到消息日志中弹出的以下两个错误消息(并且无法构建/运行项目):

Error - 16:49:38 - Error running resgen
System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. 
   at System.Convert.FromBase64String(String s)
   at MonoDevelop.Projects.Formats.MSBuild.MSBuildProjectService.GetProjectBuilder(TargetRuntime runtime, String toolsVersion, String file)
   at MonoDevelop.Projects.Formats.MSBuild.MSBuildProjectHandler.GetProjectBuilder()
   at MonoDevelop.Projects.Formats.MSBuild.MSBuildProjectHandler.RunTarget(IProgressMonitor monitor, String target, ConfigurationSelector configuration)
   at MonoDevelop.Projects.SolutionItem.OnRunTarget(IProgressMonitor monitor, String target, ConfigurationSelector configuration)
   at MonoDevelop.Projects.SolutionEntityItem.OnRunTarget(IProgressMonitor monitor, String target, ConfigurationSelector configuration)
   at MonoDevelop.Projects.DefaultProjectServiceExtension.RunTarget(IProgressMonitor monitor, IBuildTarget item, String target, ConfigurationSelector configuration)
   at MonoDevelop.Projects.ProjectServiceExtension.RunTarget(IProgressMonitor monitor, IBuildTarget item, String target, ConfigurationSelector configuration)
   at MonoDevelop.Projects.ProjectServiceExtension.RunTarget(IProgressMonitor monitor, IBuildTarget item, String target, ConfigurationSelector configuration)
   at MonoDevelop.Projects.ProjectServiceExtension.RunTarget(IProgressMonitor monitor, IBuildTarget item, String target, ConfigurationSelector configuration)
   at MonoDevelop.Projects.ProjectServiceExtension.RunTarget(IProgressMonitor monitor, IBuildTarget item, String target, ConfigurationSelector configuration)
   at MonoDevelop.Projects.ProjectServiceExtension.RunTarget(IProgressMonitor monitor, IBuildTarget item, String target, ConfigurationSelector configuration)
   at MonoDevelop.Projects.ProjectServiceExtension.RunTarget(IProgressMonitor monitor, IBuildTarget item, String target, ConfigurationSelector configuration)
   at MonoDevelop.Projects.ProjectServiceExtension.RunTarget(IProgressMonitor monitor, IBuildTarget item, String target, ConfigurationSelector configuration)
   at MonoDevelop.Projects.SolutionItem.RunTarget(IProgressMonitor monitor, String target, ConfigurationSelector configuration)
   at MonoDevelop.MonoDroid.MonoDroidProject.<RunResgen>b__13(Object )

Error - 16:49:38 - Parser database for project 'MonoA3 could not be loaded
System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. 
   at System.Convert.FromBase64String(String s)
   at MonoDevelop.Projects.Formats.MSBuild.MSBuildProjectService.GetProjectBuilder(TargetRuntime runtime, String toolsVersion, String file)
   at MonoDevelop.Projects.Formats.MSBuild.MSBuildProjectHandler.GetProjectBuilder()
   at MonoDevelop.Projects.Formats.MSBuild.MSBuildProjectHandler.<MonoDevelop.Projects.Extensions.IAssemblyReferenceHandler.GetAssemblyReferences>d__2.MoveNext()
   at MonoDevelop.Projects.DotNetProject.<GetReferencedAssemblies>d__f.MoveNext()
   at MonoDevelop.Projects.Dom.Serialization.ProjectCodeCompletionDatabase.UpdateFromProject()
   at MonoDevelop.Projects.Dom.Serialization.ProjectCodeCompletionDatabase..ctor(Project project, ParserDatabase pdb)
   at MonoDevelop.Projects.Dom.Serialization.ParserDatabase.LoadProjectDom(Project project)
   at MonoDevelop.Projects.Dom.Parser.ProjectDomService.Load(Project project)

我多次卸载并重新安装MonoDevelop(V2.8.8.4,自动安装在德语版本)和MonoDroid(4.0.6),但仍然得到相同的错误消息(操作系统是Win 7 Sp1)。在VM(Win Vista,英文版)中,我可以运行它。我的问题是,我看不到导致问题的字符串。导致此异常的代码块我找到here

Process p = null;
try {
    p = runtime.ExecuteAssembly (pinfo);
    p.StandardInput.WriteLine (Process.GetCurrentProcess ().Id.ToString ());
    string sref = p.StandardError.ReadLine ();
    byte[] data = Convert.FromBase64String (sref);
    MemoryStream ms = new MemoryStream (data);
    BinaryFormatter bf = new BinaryFormatter ();
    builder = new RemoteBuildEngine (p, (IBuildEngine) bf.Deserialize (ms));
} catch {
    if (p != null) {
        try {
            p.Kill ();
        } catch { }
    }
    throw;
}

使用TargetRuntime运行时,ProcessStartInfo pinfo。它看起来像Process返回的StandardError不是正确的Base64字符串。如何访问此Process的StandardError输出?我来自Java-World,我是Mono / .NET的新手。

1 个答案:

答案 0 :(得分:0)

我现在正在调查这个bug。只是为了确认,你说它在英文版的Windows Vista上运行正常但是如果你使用德语版的Windows 7会引发异常吗?我将使用相同的软件版本在Windows 7的英文版上进行测试,如果我能触发相同的问题,我将会看到它。