2013-08-19 3 views
5

pracowałem na WPF projektu za pomocą tych pakietów:Metoda nie znaleziono: „Pustka Caliburn.Micro.Bootstrapper`1..ctor (Boolean)”

<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" /> 

Do wczoraj, że mogę zaktualizować pakiety do:

<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" /> 

To znaczy, ja aktualizować Autofac z 3.0.2 do 3.1.1 i Caliburn.Micro z 1.5.1 do 1.5.2 (przy użyciu Nuget Package Manager). Po tym nie mogę uruchomić projektu. Otrzymuję ten błąd:

'The invocation of the constructor on type 'MyAppBootstrapper' that matches the specified binding constraints threw an exception.' Line number '9' and line position '22'.

na tej linii w App.xaml:

Komunikat wewnętrzny wyjątek:

{"Method not found: 'Void Caliburn.Micro.Bootstrapper`1..ctor(Boolean)'."}

Czy istnieje jakiś punkt do modernizacji zrobiłem, że brakowało mi?

Kompletny ślad stosu:

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() 

i układać wewnętrzny wyjątek jest:

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 

Odpowiedz

9

Cóż, znalazłem odpowiedź :) Problemem jest tutaj:

Caliburn.Micro.Autofac.AutofacBootstrapper<TRootViewModel> w Caliburn.Micro.Autofac pakiet nuget (wersja = "1.5.0") rozszerza Caliburn.Micro.Bootstrapper<TRootModel> w Caliburn.Micro pakietu i ma konstruktora takiego:

public AutofacBootstrapper() : base(true) { } 

oznacza to, że wywołuje base.ctor przepuszczając boolean argument (base.ctor(bool)). I o to chodzi. Caliburn.Micro.Bootstrapper<TRootModel> w wersji 1.5.1 ma konstruktora z parametrem bool:

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

natomiast w wersji 1.5.2, ma tylko jeden parametr mniej konstruktora:

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

Oto podpisy:

// 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(); 
     } 
    } 
} 

W związku z tym Caliburn.Micro.Autofac, Version=1.5.0.0 nie można używać z Caliburn.Micro, Version=1.5.2.0. v, aby utworzyć własny AutofacBootstrapper, który można łatwo zaimplementować, odwołując się do oryginalnego (here) lub czytając źródło pakietów nuget. Ponadto, here to mój ponownie zainstalowany, jeśli potrzebujesz.

+0

Dzięki, zaoszczędzisz mi dużo czasu :) Czy próbowałeś skontaktować się z Dave i naprawić jego pakiet na GitHub? –

+0

Witamy u nas. Tak, zostawiłem komentarz na jego blogu (post o Caliburn.Micro.Autofac [tutaj] (http://buksbaum.us/2010/08/20/bootstrapping-caliburn-micro-with-autofac/)), ale nie zrobił tego nie odpowiadaj. –

+0

Myślę, że możesz po prostu wprowadzić zmianę i złożyć żądanie zatwierdzenia. –

Powiązane problemy