System.IO.FileNotFoundException:无法加载文件或程序集System.Web.DataVisualization MEF MVC

时间:2017-07-18 20:16:02

标签: c# html asp.net-mvc xamarin mef

我正在创建一个网站,该网站应该能够接收多个模块并将这些模块组合到主项目中。对引导程序和自定义View引擎进行编程后,可以在module.dll中找到Views。

在编译测试模块进行测试之后,我得到一个奇怪的错误,它说它因某些原因无法加载System.Web.DataVisualization。我还注意到模块dll中的Controller正确加载,我可以在调试中看到它,但是这个错误会一直杀死一个线程并抛出错误。

enter image description here

这是我用于处理dll加载/组合的Bootstrapper.cs的代码。

using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.IO;

public class Bootstrapper
{
    private static CompositionContainer CompositionContainer;
    private static bool IsLoaded = false;

    public static void Compose(List<string> pluginFolders)
    {   
        if (IsLoaded) return;

        var catalog = new AggregateCatalog();

        catalog.Catalogs.Add(new DirectoryCatalog(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin")));

        foreach (var plugin in pluginFolders)
        {
            var directoryCatalog = new DirectoryCatalog(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Modules", plugin));
            catalog.Catalogs.Add(directoryCatalog);

        }
        CompositionContainer = new CompositionContainer(catalog);

        CompositionContainer.ComposeParts();
        IsLoaded = true;
    }

    public static T GetInstance<T>(string contractName = null)
    {
        var type = default(T);
        if (CompositionContainer == null) return type;

        if (!string.IsNullOrWhiteSpace(contractName))
            type = CompositionContainer.GetExportedValue<T>(contractName);
        else
            type = CompositionContainer.GetExportedValue<T>();

        return type;
    }
}

这是测试时抛出的错误。 enter image description here

1 个答案:

答案 0 :(得分:0)

不幸的是,解决方法是手动下载dll并将其添加到引用中,但主要编辑是Web.Config,我必须在其中定义要导入System.Web.DataVisualization的程序集。 <add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />