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

时间:2018-04-24 16:24:39

标签: .net asp.net-core .net-core system.reflection mapster

我有一个ASP.NET核心项目(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;
}

有没有更好的方法来解决这个问题?

更新:显然我的解决方案破坏了代码优先迁移。任何人都可以建议一种方法来实现这一目标吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

使用GetExecutingAssembly()代替GetEntryAssembly(),问题中的解决方案不会中断。奖励:使用类似GetReferencedAssemblies()的内容过滤.Where(a => a.Name.StartsWith("CompanyName"))的结果,您甚至可以摆脱name参数。

我不推荐这个,因为:

  1. 我们最终会硬编码程序集名称(直接或间接);我宁愿使用强类型。引用的程序集中的更改应该会破坏您的构建。
  2. 我们最终支付了启动性能损失。