0

如果我执行以下步骤,我会收到异常:

测试1:

MainApp-项目:

  1. 添加了 Nuget 包 Autofac 版本 4.5.0
  2. 添加了 Nuget 包 Autofac.WCF 版本 4.0

模块项目:

  1. 添加了 Nuget 包 Autofac.WCF 4.0 版(Autofac 3.3.1 将自动安装)
  2. 通过 Nuget Manager Autofac 更新到 4.5.0 在通过 Directorycatalog 加载模块期间,MainApp 的引导程序会引发此异常。

Autofac.WCF 具有依赖关系 Autofac >=3.3.1 && < 5.0.0

Bootstrapper.cs 中的异常:Prism.Wpf.dll 中出现“System.IO.FileLoadException”类型的未处理异常

附加信息:Die Datei oder Assembly "Autofac, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da" oder eine Abhängigkeit davon wurde nicht gefunden。Eine bestimmte Datei konnte nicht gefunden oder geladen werden。(Ausnahme von HRESULT:0x80131621)

测试 2:

我也尝试了这些步骤:

主应用程序:

  1. 使用 nuget 管理器安装 Autofac 4.5.0
  2. 使用 nuget 管理器安装 Autofac.WCF

模块:

  1. 使用 nuget 管理器安装 Autofac 4.5.0
  2. 使用 nuget 管理器安装 Autofac.WCF

有可能,我做错了,因为我第一次使用 Autofac 和 Autofac.WCF。我在统一 IoC 之前使用过。

引导程序.cs:

using Autofac;
using Prism.Autofac;
using PrismAutofacApp2.Views;
using System.Windows;
using Prism.Modularity;

namespace PrismAutofacApp2
{
    class Bootstrapper : AutofacBootstrapper
    {
        protected override DependencyObject CreateShell()
        {
            return Container.Resolve<MainWindow>();
        }

        protected override void InitializeShell()
        {
            Application.Current.MainWindow.Show();
        }

        protected override IModuleCatalog CreateModuleCatalog()
        {
            var modulecatalog = new DirectoryModuleCatalog() { ModulePath = @".\Modules" };

            return modulecatalog;
        }

    }
}

模块:

using Prism.Modularity;
using Prism.Regions;
using System;
using Autofac;


namespace PrismModule2
{
    public class PrismModule2Module : Module
    {
        IRegionManager _regionManager;

        public PrismModule2Module(IRegionManager regionManager)
        {
            _regionManager = regionManager;
        }
    }
}

更新

我按照评论中的要求卸载了软件包,然后按照测试 2 中提到的步骤重新安装了所有内容,问题仍然存在。

如果我通过删除覆盖方法 CreateModulecatalog 停用了模块加载,则问题不再发生,这意味着 MainApp 中的 Autofac 4.5.0 + Autofac.WCF 4.0.0 有效,但如果我加载模块(包括 Autofac 4.5 .0 和 Autofac.WCF)与 CreateModulecatalog Autofac 4.5.0 和 Autofac.WCF。

请记住,模块没有 app.config,因为它是一个模块 (dll) 项目。

对我来说,让一个项目按照以下要求运行是非常重要的:

主应用程序:

  1. Autofac 4.5.0 + Autofac.WCF 4.0.0 + Prism.WPF
  2. 模块应从目录加载
  3. MainApp 启动一个可执行文件

模块:

  1. Autofac 4.5.0 + Autofac.WCF 4.0.0(命名管道)+ Prism.WPF
  2. 模块必须托管 WCF 服务,因为 mainapp 启动一个可执行文件,而这些可执行文件必须使用 wcf 服务 + ioc。

对我来说一切都被阻止了,因为无法在 mainapp(引导程序)中毫无例外地使用 autofac + autofac.wcf 加载模块。

如果有人可以支持我,那么我可以设置一个带有共享桌面的 teamviewer 会话来解决我的问题并给我指导。

4

2 回答 2

1

我通过以下步骤解决了:

我的模块:

  1. 在我的模块中使用 nuget 包管理器删除了 Autofac + Autofac.WCF
  2. 在我的模块中安装了带有 nuget 包管理器的 Autofac 4.5.0
  3. 下载 Autofac.WCF 源代码
  4. 打开解决方案
  5. 删除了 autofac 参考的条目
  6. 通过 nuget 包管理器加载 Autofac 4.5.0
  7. Autofac.WCF 项目的构建版本
  8. 将 DLL 复制到我的模块并进行引用
于 2017-05-12T18:43:03.650 回答
0

我做了Shazter推荐的。我去了GitHub链接并下载了源代码。加载后,我删除了由 NuGet 恢复的默认 Autofac。然后我通过 NuGet 添加了最新的 Autofac 并重建了一个发布版本。然后我引用了我的新dll,没有更多问题了。

于 2017-05-15T11:43:37.940 回答