无法加载文件或程序集mscorlib

时间:2016-12-02 09:47:20

标签: dll .net-core mscorlib

我是NetCore的新手,我尝试使用以下代码动态加载dll:

public void LoadDll()
{
    try
    {
        var dllPath = @"C:\Temp\dynamic.dll";

        var asl = new AssemblyLoader();
        var asm = asl.LoadFromAssemblyPath(dllPath);

        var type = asm.GetType("MyNamespace.MyClass");
        dynamicInstance = Activator.CreateInstance(type);
    }
    catch (Exception ex)
    {

    }
}

public class AssemblyLoader : AssemblyLoadContext
{
    // Not exactly sure about this
    protected override Assembly Load(AssemblyName assemblyName)
    {
        var deps = DependencyContext.Default;
        var res = deps.CompileLibraries.Where(d => d.Name.Contains(assemblyName.Name)).ToList();
        var assembly = Assembly.Load(new AssemblyName(res.First().Name));
        return assembly;
    }
}

当我调用asm.GetType方法时,抛出异常:

  

“无法加载文件或程序集'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'。当前状态下的操作不合法。(HRESULT异常:0x80131509)”来源:系统。 Private.CoreLib

这是我的project.json:

{
    "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.1",
      "type": "platform"
    },
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.1",
    "Microsoft.AspNetCore.Routing": "1.0.1",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0" 
    },

    "tools": {
      "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
    },

    "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
        ]
      }
    },

    "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
    },

    "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
      }
    },

    "publishOptions": {
    "include": [
      "wwwroot",
      "**/*.cshtml",
      "appsettings.json",
      "web.config"
      ]
    },

    "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
    }
}

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

这是一个非常常见的问题。从.NET Core 1.1开始,您无法加载为.NET Framework构建的库(它们基于mscorlib),而只能加载使用PCL构建的库。

检查您尝试加载的程序集。

.NET Core 2.0将解决此主题。