如何在.NET Core项目中获取类库程序集引用?

2024-01-01

我有一个 ASP.NET Core 项目 (netcoreapp2.0),它引用类库项目 (netstandard2.0) 中的模型。我正在尝试使用 Mapster 来映射存储在类库中的对象。 Mapster 的文档说使用以下代码从 Startup.cs 调用 Scan 方法:

TypeAdapterConfig.GlobalSettings.Scan(assembly1, assembly2, assemblyN)

我遇到的问题是如何最好地将类库的程序集引用传递给 Scan 方法。我认为这更多的是一个一般性的 .NET 问题,而不是 Mapster 特有的问题。我能想到的最好的办法是以下,但感觉很尴尬。

private Assembly GetAssemblyByName(string name)
{
    var assemblies = Assembly.GetEntryAssembly().GetReferencedAssemblies();
    var assemblyName = assemblies.FirstOrDefault(i => i.Name == name);
    var assembly = Assembly.Load(assemblyName);
    return assembly;
}

有更好的方法来处理这个问题吗?

更新:显然我上面的解决方案破坏了代码优先迁移。谁能建议一种方法来实现这一目标?


使用其中定义的类型获取程序集。

var assembly = Assembly.GetAssembly(typeof(NameSpace.TypeName));

更新以解决您的评论(但我不推荐这样做):

Use GetExecutingAssembly()代替GetEntryAssembly()并且您在问题中的解决方案不会中断。奖励:过滤结果GetReferencedAssemblies()与类似的东西.Where(a => a.Name.StartsWith("CompanyName"))你甚至可以摆脱name争论。

我不推荐这样做,因为:

  1. 我们最终将硬编码程序集名称(直接或间接);我宁愿使用强类型。引用程序集的更改应该会破坏您的构建。
  2. 我们最终会付出启动性能损失。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在.NET Core项目中获取类库程序集引用? 的相关文章