【问题标题】:Replacing AppDomain in Net Core替换 Net Core 中的 AppDomain
【发布时间】:2017-03-04 12:40:26
【问题描述】:

所以,我是 C# 和 Net Core 的新手,有人将代码传递给了评估命令。 但是不是Net Core做的,所以Net Core中不存在AppDomain,怎么办?

ScriptOptions so = ScriptOptions.Default;

            so = so.WithImports(new string[] { "System.Math", "System.Diagnostics", "System.Runtime.InteropServices",
            "Discord.WebSocket", "Discord.Commands", "Discord", "System.Threading.Tasks", "System.Linq", "System", "System.Collections.Generic", "System.Convert", "System.Reflection"});
            so = so.WithReferences(AppDomain.CurrentDomain.GetAssemblies().Where(xa => !xa.IsDynamic && !string.IsNullOrWhiteSpace(xa.Location)));

【问题讨论】:

    标签: c# reflection .net-core


    【解决方案1】:

    .net 核心中没有AppDoamain,您可以使用Microsoft.Extensions.DependencyModel 库来实现您所需要的。

    下面是来自article 的代码。您可以在那里查看完整的详细信息。

    return GetReferencingLibraries("Specify")
    .SelectMany(assembly => assembly.ExportedTypes);
    
    public static IEnumerable<Assembly> GetReferencingAssemblies(string assemblyName)
    {
        var assemblies = new List<Assembly>();
        var dependencies = DependencyContext.Default.RuntimeLibraries;
        foreach (var library in dependencies)
        {
            if (IsCandidateLibrary(library, assemblyName))
            {
                var assembly = Assembly.Load(new AssemblyName(library.Name));
                assemblies.Add(assembly);
            }
        }
        return assemblies;
    }
    
    private static bool IsCandidateLibrary(RuntimeLibrary library, assemblyName)
    {
        return library.Name == (assemblyName)
            || library.Dependencies.Any(d => d.Name.StartsWith(assemblyName));
    }
    

    您需要包含Microsoft.Extensions.DependencyModel 包才能使用上述代码。

    【讨论】:

    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多