我正在尝试在单独的应用程序域中加载程序集,但遇到了一个非常奇怪的问题。以下是一些代码:
public static void LoadAssembly(string assemblyPath)
{
string pathToDll = Assembly.GetCallingAssembly().CodeBase;
AppDomainSetup domainSetup = new AppDomainSetup
{
PrivateBinPath = pathToDll
};
AppDomain newDomain = AppDomain.CreateDomain("AssemblyLoader",null,domainSetup);
AssemblyLoader loader = (AssemblyLoader)newDomain.CreateInstanceFromAndUnwrap(
pathToDll,
typeof(AssemblyLoader).FullName);
}
AssemblyLoader是与此类相同程序集中的另一个类,它继承自MarshalByRef,但由于某种奇怪的原因,每次尝试运行时都会出现强制转换异常。我甚至硬编码了DLL的路径而不是使用GetCallingAssembly().CodeBase,但仍然出现异常。
我知道在没有实际看到代码并获得更多信息的情况下回答这样的问题很困难,但也许有人遇到过类似的情况,并且知道常见的“坑”以及应该注意什么。
编辑:我不想直接加载它的原因是因为这只是代码的一部分。最终目标是,这个类将有一个方法来加载程序集,获取它们的GUID和其他一些信息,并将它们存储在我正在开发的项目的数据库中。因此,如果我在单独的应用程序域中加载此程序集,我也可以在那里加载其他程序集,然后卸载该应用程序域。如果我只需要那些数据,那么在整个应用程序的持续时间内加载所有这些程序集是没有意义的。