MEF加载的组件中的Nuget依赖项



我正在尝试使用MEF扩展的C#.NET Core中的应用程序。目前,我可以在没有任何库,没有依赖关系或与主机应用相同的依赖项的情况下执行此操作(因此已经加载了依赖关系)。但是,如果我想使用带有nuget参考的库,则主要应用程序未使用,该库的加载在该参考文献上失败。

如果试图加载带有此参考的组件,我该如何强制主应用程序加载缺失的nuget依赖关系?在我看来,这是一个非常普遍的用例,但是我在这里迷路了,找不到出路。谢谢。

供参考,我要发布代码的部分。

[ImportMany]
private IEnumerable<Lazy<IService, IServiceMetadata>> _asrServices;
...
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(Path.Combine(Directory.GetCurrentDirectory(), "Services")));          
CompositionContainer _container = new CompositionContainer(catalog);
...
foreach (Lazy<IService, IServiceMetadata> _service in _asrServices)
{
   var _serviceInstance = _service.Value // here the loading fails
}

jiri

.net当前有两个构建"系统"。一个是原来的项目文件,即导入Microsoft.Common.propsMicrosoft.CSharp.targets(假设它是一个C#项目),并且两者之间有很多XML,自从.NET首次发布以来,显然是在2002年发行的。在2016年,有一个新的项目系统通常称为SDK Projects,因为*proj文件引用构建系统的方式是MSBUILD XML中的SDK元素或属性。尽管它是不合时宜的,因为有一个常见的错误假设,但我想指出,尽管为.NET Core创建了SDK项目,但您可以针对SDK项目的.NET框架。

使用原始项目文件,当您构建时,所有项目参考都将复制到输出目录。但是,使用SDK项目,只有该项目的组件被复制到输出(我不确定,但我认为即使将其复制为输出的内容实际上也不会在构建上复制)。为了将所有内容获取单个目录,您应该使用dotnet CLI的发布命令。

因此,如果您有一个构建项目并在某处复制所有插件的构建脚本,则应使用SDK样式项目文件将dotnet publish步骤添加到每个插件的脚本中。

最新更新