如何在 .NET Core 项目中获取 class 库程序集引用?
How to get class library assembly reference in .NET Core project?
我有一个 ASP.NET 核心项目 (netcoreapp2.0),它引用 class 库项目 (netstandard2.0) 中的模型。我正在尝试使用 Mapster 映射存储在 class 库中的对象。 Mapster 的文档说使用代码从 Startup.cs 调用 Scan 方法:
TypeAdapterConfig.GlobalSettings.Scan(assembly1, assembly2, assemblyN)
我遇到的问题是如何最好地获取 class 库的程序集引用以传递给 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));
更新以解决您的评论(但我不推荐这样做):
使用 GetExecutingAssembly()
而不是 GetEntryAssembly()
并且您的问题解决方案不会中断。奖励:用 .Where(a => a.Name.StartsWith("CompanyName"))
之类的东西过滤 GetReferencedAssemblies()
的结果,你甚至可以去掉 name
参数。
我不推荐这个,因为:
- 我们最终将硬编码程序集名称(直接或间接);我宁愿使用强类型。引用程序集的更改应该会破坏您的构建。
- 我们最终付出了启动性能的代价。
我有一个 ASP.NET 核心项目 (netcoreapp2.0),它引用 class 库项目 (netstandard2.0) 中的模型。我正在尝试使用 Mapster 映射存储在 class 库中的对象。 Mapster 的文档说使用代码从 Startup.cs 调用 Scan 方法:
TypeAdapterConfig.GlobalSettings.Scan(assembly1, assembly2, assemblyN)
我遇到的问题是如何最好地获取 class 库的程序集引用以传递给 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));
更新以解决您的评论(但我不推荐这样做):
使用 GetExecutingAssembly()
而不是 GetEntryAssembly()
并且您的问题解决方案不会中断。奖励:用 .Where(a => a.Name.StartsWith("CompanyName"))
之类的东西过滤 GetReferencedAssemblies()
的结果,你甚至可以去掉 name
参数。
我不推荐这个,因为:
- 我们最终将硬编码程序集名称(直接或间接);我宁愿使用强类型。引用程序集的更改应该会破坏您的构建。
- 我们最终付出了启动性能的代价。