我正在使用它:
AppDomain.CurrentDomain.GetAssemblies().SelectMany<Assembly,string>( a => a.GetModules().Select<Module,string>( m => m.FullyQualifiedName )).ToArray()
获取所有已加载程序集的名称。
它来自获取类型的友好C#名称的代码:
return (Type)(new CSharpCodeProvider().CompileAssemblyFromSource( new CompilerParameters( AppDomain.CurrentDomain.GetAssemblies().Select<Assembly,string>( a => a.CodeBase).ToArray(), null, false) {GenerateExecutable = false, GenerateInMemory = true, TreatWarningsAsErrors = false, CompilerOptions = "/optimize"}, "public static class C{public static System.Type M(){return typeof(" + friendlyName + ");}}").CompiledAssembly.GetExportedTypes()[0].GetMethod("M").Invoke( null, System.Reflection.BindingFlags.Static, null, null, null ));
但编译器会产生如下错误: 无法加载文件或程序集'file:/// C:\ Users {username} \ AppData \ Local \ Temp \ qk3bjlf3.dll'或其依赖项之一。系统找不到指定的文件。
问题是......该文件实际上并未在任何地方引用。它不是由AppDomain.CurrentDomain.GetAssemblies()或任何子模块返回的,每次我在调试器中单击“继续”时名称都会更改。
答案 0 :(得分:0)
其实我喜欢这个:
var assemblies = new List<string>();
assemblies.AddRange(new List<string>(AppDomain.CurrentDomain.GetAssemblies()
.Where((a) => !a.IsDynamic).Select((a) => a.CodeBase
.Replace("file:\\", "")
.Replace("file:///", ""))));
以防万一(因为我经常使用这个)我创建了一个小型图书馆,以此类型的东西
代码和文档在这里:Kendar Expression Builder 虽然nuget包在这里:Nuget Sharp Template