Я пытаюсь узнать больше об Reflection, взял уже созданный код и добавил к нему.Теперь я пытаюсь запросить GAC о других сборках и экземплярах типов сборки и т. Д. Я изменил код, который нашел здесь , но myAssemblyList пуст.Можете ли вы сказать мне, что я делаю не так?Я отладил и поместил перерыв в "var currentAssembly = value.GetAssembly (f);"и он возвращает ноль.Весь код, который я видел, заполняет сборки из текущего AppDomain, но я видел такие методы, как LoadFrom (), которые должны работать с путем к каталогу.Я также увидел этот пост и скомпилировал его.
class Program
{
static void Main(string[] args)
{
AppDomainSetup domaininfo = new AppDomainSetup();
domaininfo.ApplicationBase = System.Environment.CurrentDirectory;
Evidence adevidence = AppDomain.CurrentDomain.Evidence;
AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo);
Type type = typeof(Proxy);
var value = (Proxy)domain.CreateInstanceAndUnwrap(
type.Assembly.FullName,
type.FullName);
//String myDir = "C:\\Windows\\Microsoft.NET\\assembly\\GAC_64\\";
String myDir = "C:\\Windows\\Microsoft.NET\\assembly\\";
List<Assembly> myAssemblyList = new List<Assembly>();
foreach (String f in Directory.GetFiles(myDir, "*.dll", SearchOption.AllDirectories))
{
//Console.WriteLine($"Here is f: {f}");
var currentAssembly = value.GetAssembly(f);
if (currentAssembly != null)
{
myAssemblyList.Add(currentAssembly);
Console.WriteLine(currentAssembly.FullName);
//Console.ReadLine();
}
Console.WriteLine($"Total Assemblies found: {myAssemblyList.Count}");
}
Console.WriteLine($"Total Assemblies found: {myAssemblyList.Count}");
Console.ReadLine();
}
}
public class Proxy : MarshalByRefObject
{
public Assembly GetAssembly(string assemblyPath)
{
try
{
return Assembly.LoadFile(assemblyPath);
}
catch (Exception)
{
return null;
// throw new InvalidOperationException(ex);
}
}
}
Я отскочил на один каталог назад и попытался собрать данные из GAC_ *, то есть 32, 64 и MSIL.Я добавил тест для null для currentAssembly, чтобы решить проблему с GetAssembly ().Но все же некоторые каталоги, которые содержат файлы dll и non-dll, вызывают исключения.