替代gasembly.ReflectionOnlyload()和ReflectionOnlyLoadFrom()?

发布于 2025-02-10 08:47:16 字数 548 浏览 1 评论 0 原文

我正在将.NET 4.X应用程序迁移到.NET 6,但是上述方法现在已弃用,如果调用了例外情况。有什么选择?

这是代码,该代码将通过一个汇编文件名列表,并加载任何在assemblynfo.cs中具有特定汇编级属性的组件:

AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve +=
    (s, e) => Assembly.ReflectionOnlyLoad(e.Name);

foreach (var assemblyFile in assemblyFilenames)
{
    var reflectionOnlyAssembly = Assembly.ReflectionOnlyLoadFrom(assemblyFile);
    if (FoundOurCustomAttr(reflectionOnlyAssembly))
    {
        var assembly = Assembly.LoadFrom(assemblyFile);
        ProcessAssembly(assembly);
    }
}

I'm migrating a .Net 4.x application to .Net 6, but the above methods are now deprecated and throw an exception if called. What are the alternatives?

This is the code, which gets passed a list of assembly filenames, and loads any assemblies found to have a certain assembly-level attribute in AssemblyInfo.cs:

AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve +=
    (s, e) => Assembly.ReflectionOnlyLoad(e.Name);

foreach (var assemblyFile in assemblyFilenames)
{
    var reflectionOnlyAssembly = Assembly.ReflectionOnlyLoadFrom(assemblyFile);
    if (FoundOurCustomAttr(reflectionOnlyAssembly))
    {
        var assembly = Assembly.LoadFrom(assemblyFile);
        ProcessAssembly(assembly);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

影子是时光的心 2025-02-17 08:47:16

另一种选择是使用软件包。

var paths = new List<string>(Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll"));
paths.AddRange(assemblyFilenames);

var resolver = new PathAssemblyResolver(paths);
var ctx = new MetadataLoadContext(resolver);
foreach (var assemblyFile in assemblyFilenames)
{
    var assembly = ctx.LoadFromAssemblyPath(assemblyFile);
    foreach(var a in assembly.CustomAttributes)
        // a.AttributeType
}

An alternative is using MetadataLoadContext package.

var paths = new List<string>(Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll"));
paths.AddRange(assemblyFilenames);

var resolver = new PathAssemblyResolver(paths);
var ctx = new MetadataLoadContext(resolver);
foreach (var assemblyFile in assemblyFilenames)
{
    var assembly = ctx.LoadFromAssemblyPath(assemblyFile);
    foreach(var a in assembly.CustomAttributes)
        // a.AttributeType
}
短叹 2025-02-17 08:47:16

Could maybe the methods Assembly.Load and Assembly.LoadFrom be a valid option?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文