ICSharpCode.ILSpy.CSharpLanguage.WriteResourceFilesInProject C# (CSharp) Метод

WriteResourceFilesInProject() приватный Метод

private WriteResourceFilesInProject ( LoadedAssembly assembly, DecompilationOptions options, HashSet directories ) : string>>.IEnumerable
assembly LoadedAssembly
options DecompilationOptions
directories HashSet
Результат string>>.IEnumerable
		IEnumerable<Tuple<string, string>> WriteResourceFilesInProject(LoadedAssembly assembly, DecompilationOptions options, HashSet<string> directories)
		{
			//AppDomain bamlDecompilerAppDomain = null;
			//try {
			foreach (EmbeddedResource r in assembly.ModuleDefinition.Resources.OfType<EmbeddedResource>()) {
				string fileName;
				Stream s = r.GetResourceStream();
				s.Position = 0;
				if (r.Name.EndsWith(".g.resources", StringComparison.OrdinalIgnoreCase)) {
					IEnumerable<DictionaryEntry> rs = null;
					try {
						rs = new ResourceSet(s).Cast<DictionaryEntry>();
					}
					catch (ArgumentException) {
					}
					if (rs != null && rs.All(e => e.Value is Stream)) {
						foreach (var pair in rs) {
							fileName = Path.Combine(((string)pair.Key).Split('/').Select(p => cleanupName(p)).ToArray());
							string dirName = Path.GetDirectoryName(fileName);
							if (!string.IsNullOrEmpty(dirName) && directories.Add(dirName)) {
								CreateDirSafely(Path.Combine(options.SaveAsProjectDirectory, dirName));
							}
							Stream entryStream = (Stream)pair.Value;
							entryStream.Position = 0;
							if (fileName.EndsWith(".baml", StringComparison.OrdinalIgnoreCase)) {
								//									MemoryStream ms = new MemoryStream();
								//									entryStream.CopyTo(ms);
								// TODO implement extension point
								//									var decompiler = Baml.BamlResourceEntryNode.CreateBamlDecompilerInAppDomain(ref bamlDecompilerAppDomain, assembly.FileName);
								//									string xaml = null;
								//									try {
								//										xaml = decompiler.DecompileBaml(ms, assembly.FileName, new ConnectMethodDecompiler(assembly), new AssemblyResolver(assembly));
								//									}
								//									catch (XamlXmlWriterException) { } // ignore XAML writer exceptions
								//									if (xaml != null) {
								//										File.WriteAllText(Path.Combine(options.SaveAsProjectDirectory, Path.ChangeExtension(fileName, ".xaml")), xaml);
								//										yield return Tuple.Create("Page", Path.ChangeExtension(fileName, ".xaml"));
								//										continue;
								//									}
							}
							using (FileStream fs = new FileStream(Path.Combine(options.SaveAsProjectDirectory, fileName), FileMode.Create, FileAccess.Write)) {
								entryStream.CopyTo(fs);
							}
							yield return Tuple.Create("Resource", fileName);
						}
						continue;
					}
				}
				fileName = GetFileNameForResource(r.Name, directories);
				using (FileStream fs = new FileStream(Path.Combine(options.SaveAsProjectDirectory, fileName), FileMode.Create, FileAccess.Write)) {
					s.CopyTo(fs);
				}
				yield return Tuple.Create("EmbeddedResource", fileName);
			}
			//}
			//finally {
			//    if (bamlDecompilerAppDomain != null)
			//        AppDomain.Unload(bamlDecompilerAppDomain);
			//}
		}