⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monoreflectionloader.cs

📁 SharpDevelop2.0.0 c#开发免费工具
💻 CS
字号:
// <file>
//     <copyright see="prj:///doc/copyright.txt"/>
//     <license see="prj:///doc/license.txt"/>
//     <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
//     <version>$Revision: 983 $</version>
// </file>

using ICSharpCode.Build.Tasks;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using System;
using System.IO;
using System.Reflection;

namespace ICSharpCode.MonoAddIn
{
	public sealed class MonoReflectionLoader : MarshalByRefObject
	{
		public MonoReflectionLoader()
		{
		}
		
		public string LoadAndCreateDatabase(string fileName, string include)
		{
			try {
				LoggingService.Debug("MonoReflectionLoader: Load: " + include);
				ReflectionProjectContent content = LoadProjectContent(fileName, include);
				if (content == null)
					return null;
				return DomPersistence.SaveProjectContent(content);
			} catch (Exception ex) {
				LoggingService.Error(ex);
				return null;
			}
		}
		
		ReflectionProjectContent LoadProjectContent(string fileName, string include)
		{
			fileName = Path.GetFullPath(fileName);
			Assembly assembly;
			AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += AssemblyResolve;
			try {
				if (File.Exists(fileName)) {
					assembly = Assembly.ReflectionOnlyLoadFrom(fileName);
					return new ReflectionProjectContent(assembly, fileName);
				}
				assembly = LoadMonoGacAssembly(include);
				if (assembly != null)
					return new ReflectionProjectContent(assembly);
				else
					return null;
			} catch (BadImageFormatException) {
				return null;
			} finally {
				AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve -= AssemblyResolve;
			}
		}
		
		Assembly AssemblyResolve(object sender, ResolveEventArgs e)
		{
			return LoadMonoGacAssembly(e.Name);
		}
		
		Assembly LoadMonoGacAssembly(string name)
		{
			MonoAssemblyName assemblyName = MonoGlobalAssemblyCache.FindAssemblyName(name);
			if (assemblyName != null && assemblyName.FileName != null) {
				return Assembly.ReflectionOnlyLoadFrom(assemblyName.FileName);
			}
			return null;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -