C# 从非根目录加载程序集
我试图从根目录下的不同文件夹将程序集加载到我的项目中,并为它设置一个新域。我的目标是在运行时加载和卸载。当ddl文件位于应用程序的根目录中时,所有这些都可以正常工作,但一旦我将其放入插件文件夹中,我就无法找到错误文件。我知道有很多这样的话题,但没有一个能满足我所有的需求,也没有一个能像我所期望的那样工作。一旦我加载到当前域,它就会工作 示例代码:C# 从非根目录加载程序集,c#,directory,.net-assembly,C#,Directory,.net Assembly,我试图从根目录下的不同文件夹将程序集加载到我的项目中,并为它设置一个新域。我的目标是在运行时加载和卸载。当ddl文件位于应用程序的根目录中时,所有这些都可以正常工作,但一旦我将其放入插件文件夹中,我就无法找到错误文件。我知道有很多这样的话题,但没有一个能满足我所有的需求,也没有一个能像我所期望的那样工作。一旦我加载到当前域,它就会工作 示例代码: dllFileNames = Directory.GetFiles(path, "*.dll"); IColle
dllFileNames = Directory.GetFiles(path, "*.dll");
ICollection<Assembly> assemblies = new List<Assembly>(dllFileNames.Length);
AppDomain currentDomain = AppDomain.CurrentDomain;
Evidence asEvidence = currentDomain.Evidence;
AppDomainSetup aps = new AppDomainSetup
{
ApplicationBase = @"[root of application]",
PrivateBinPath = @"[Plugin folder]"
};
AppDomain myDomain = AppDomain.CreateDomain("Plugins",asEvidence,aps);
SimpleAssemblyLoader assemblyLoader = (SimpleAssemblyLoader)myDomain.CreateInstanceAndUnwrap(typeof(SimpleAssemblyLoader).Assembly.FullName, typeof(SimpleAssemblyLoader).FullName);
foreach (string dllFile in dllFileNames)
{
assemblyLoader.LoadFrom(dllFile);
}
var assemblyList = myDomain.GetAssemblies(); // in here getting error :( file not found for no reason.
设置为您的插件文件夹
或注册事件以解决缺少的程序集
对于.Net核心编程,请查看类Thx以获取评论,但我猜您没有阅读我的全部问题..:(正如您在我发布的代码中看到的,已经设置了Basedir。这是我的问题var assemblyList=myDomain.GetAssemblies();//在这里获取错误:(无缘无故找不到文件。问题是我可以加载它,但无法获取已加载程序集的列表…您是否尝试使用AssemblyResolve事件?我的第二个意见。事件未被删除或其他内容?每个appdomain都有单独的AssemblyResolve事件。
public class SimpleAssemblyLoader : MarshalByRefObject
{
public void Load(string path)
{
ValidatePath(path);
Assembly.Load(path);
}
public void LoadFrom(string path)
{
ValidatePath(path);
Assembly.LoadFrom(path);
}
private void ValidatePath(string path)
{
if (path == null)
{
throw new ArgumentNullException("path");
}
if (!System.IO.File.Exists(path))
{
throw new ArgumentException(string.Format("path \"{0}\" does not exist", path));
}
}
}