【问题标题】:Method not found: 'Void Caliburn.Micro.Bootstrapper`1..ctor(Boolean)'找不到方法:'Void Caliburn.Micro.Bootstrapper`1..ctor(Boolean)'
【发布时间】:2013-08-19 16:10:24
【问题描述】:

我正在使用这些包进行WPF 项目:

<package id="Autofac" version="3.0.2" targetFramework="net40" />
<package id="Caliburn.Micro" version="1.5.1" targetFramework="net40" />
<package id="Caliburn.Micro.Autofac" version="1.5.0" targetFramework="net40" />

直到昨天我将软件包更新到:

<package id="Autofac" version="3.1.1" targetFramework="net40" />
<package id="Caliburn.Micro" version="1.5.2" targetFramework="net40" />
<package id="Caliburn.Micro.Autofac" version="1.5.0" targetFramework="net40" />

我的意思是,我将 Autofac 从 3.0.2 更新到 3.1.1 和 Caliburn.Micro 从 1.5.1 到 1.5.2(通过使用 Nuget Package Manager)。之后,我无法运行该项目。我收到此错误:

'在类型'MyAppBootstrapper'上调用构造函数 匹配指定的绑定约束引发异常。线 数字'9'和行位置'22'。

在App.xaml的这一行:

内部异常消息是:

{"方法未找到:'无效 Caliburn.Micro.Bootstrapper`1..ctor(Boolean)'。"}

我错过的升级有什么意义吗?

完整的堆栈跟踪:

at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
at Shivar.Tameshk.Server.UI.App.InitializeComponent() in d:\Projects\Shivar.Tameshk\Tameshk\Server\Shivar.Tameshk.Server.UI\App.xaml:line 1
at Shivar.Tameshk.Server.UI.App.Main() in d:\Projects\Shivar.Tameshk\Tameshk\Server\Shivar.Tameshk.Server.UI\obj\Debug\App.g.cs:line 0
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

以及内部异常的堆栈:

at Caliburn.Micro.Autofac.AutofacBootstrapper`1..ctor()
at Shivar.Tameshk.Server.UI.ServerUiBootstrapper..ctor() in d:\Projects\Shivar.Tameshk\Tameshk\Server\Shivar.Tameshk.Server.UI\ServerUiBootstrapper.cs:line 28

【问题讨论】:

    标签: wpf autofac caliburn.micro wpf-4.0


    【解决方案1】:

    嗯,我找到了答案:)问题就在这里:

    Caliburn.Micro.Autofac nuget 包 (version="1.5.0") 中的 Caliburn.Micro.Autofac.AutofacBootstrapper&lt;TRootViewModel&gt; 扩展了 Caliburn.MicroCaliburn.Micro.Bootstrapper<TRootModel> /em> 包,并有一个这样的构造函数:

    public AutofacBootstrapper() : base(true) { }
    

    这意味着它通过传递boolean 参数(base.ctor(bool))来调用base.ctor。事情就是这样。 1.5.1 版本中的 Caliburn.Micro.Bootstrapper&lt;TRootModel&gt; 有一个带有 bool 参数的构造函数:

    public Bootstrapper(bool useApplication = true) : base(useApplication) {
      this.Start();
    }
    

    在1.5.2 版本中,它只有一个无参数构造函数:

    public Bootstrapper() : base(true) {
      this.Start();
    }
    

    这是签名:

    // Assembly: Caliburn.Micro.Autofac, Version=1.5.0.0
    namespace Caliburn.Micro.Autofac {
        public class AutofacBootstrapper<TRootViewModel> : Bootstrapper<TRootViewModel> {
            public AutofacBootstrapper() : base(true) { }
        }
    }
    
    // Assembly: Caliburn.Micro, Version=1.5.1.0
    namespace Caliburn.Micro {
        public class Bootstrapper<TRootModel> : BootstrapperBase {
            public Bootstrapper(bool useApplication = true) : base(useApplication) {
                this.Start();
            }
        }
    }
    
    // Assembly: Caliburn.Micro, Version=1.5.2.0
    namespace Caliburn.Micro {
        public class Bootstrapper<TRootModel> : BootstrapperBase {
            public Bootstrapper() : base(true) {
                this.Start();
            }
        }
    }
    

    因此,Caliburn.Micro.Autofac, Version=1.5.0.0 不能与Caliburn.Micro, Version=1.5.2.0 一起使用,您必须创建自己的AutofacBootstrapper,这很容易通过参考原始here 或阅读nuget 包源来实现。另外,here 是我重新实现的,如果你需要的话。

    【讨论】:

    • 谢谢,你为我节省了很多时间 :) 你有没有尝试联系 Dave 并在 GitHub 上修复他的包?
    • 不客气。是的,我在他的博客上发表了评论(关于 Caliburn.Micro.Autofac here 的帖子)但他没有回答。
    • 我认为您可以进行更改并提出提交请求。
    猜你喜欢
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多