Я загрузил среду разработки MonoDroid. Если я создам новый проект «Моно для Android-приложений» или импортирую образец проекта в MonoDevelop, я сразу же получу два следующих сообщения об ошибках, появляющихся в журнале сообщений (и не могу создать/запустить проект):MonoDevelop/MonoDroid project/build error: не действительная строка base-64
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). В виртуальной машине (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. Как я могу получить доступ к стандартным выводам этого процесса? Я пришел из Java-World, я совершенно новый для Mono/.NET.
Почему вы думаете, что p.StandardError.ReadLine() возвращает строку base64? – Steve
Подпрограмма хочет декодировать ее из Base64, это то, что делает Convert.FromBase64String(), в соответствии с [документацией] (http://msdn.microsoft.com/en-us/library/system.convert.frombase64string.aspx) , По-видимому, он ожидает Base64 String? – CodeOrion