便携式库上是否有AppDomain.GetAssemblies的替代方案?
我正在寻找一种方法来将当前应用程序的程序集放在可移植的库项目中。
在经典库项目中,下面的代码行完成了这项工作:
var assemblies = System.AppDomain.CurrentDomain.GetAssemblies();
但似乎System.AppDomain不可用于可移植库。
有谁知道在便携式库上获取当前域程序集的方法?
您可以使用平台挂钩:
在您的便携式库中:
using System.Collections.Generic; namespace PCL { public interface IAppDomain { IList GetAssemblies(); } public interface IAssembly { string GetName(); } public class AppDomainWrapper { public static IAppDomain Instance { get; set; } } }
你可以访问它们(在你的便携式库中),如:
AppDomainWrapper.Instance.GetAssemblies();
在依赖于平台的应用程序中,您需要实现它:
public class AppDomainWrapperInstance : IAppDomain { IList GetAssemblies() { var result = new List (); foreach (var assembly in System.AppDomain.CurrentDomain.GetAssemblies()) { result.Add(new AssemblyWrapper(assembly)); } return result; } } public class AssemblyWrapper : IAssembly { private Assembly m_Assembly; public AssemblyWrapper(Assembly assembly) { m_Assembly = assembly; } public string GetName() { return m_Assembly.GetName().ToString(); } }
并引导它
AppDomainWrapper.Instance = new AppDomainWrapperInstance();