Как избежать исключения FileNotFoundException для vshost32 при использовании метода AssemblyScanner FromAssembliesInPath? - PullRequest
1 голос
/ 13 декабря 2011

Исключение выдается при использовании метода AssemblyScanner.FromAssembliesInPath.

Как мне решить эту проблему?

Я использую расширение Ninject.Extensions.Conventions . Я использую версии, которые я только что получил от NuGet час назад.

  • Ninject 2.2.1.4 Обновлено 5/7/2011
  • Ninject.Extensions.Conventions 2.2.0.5 Обновлено 5/7/2011

Я использую сканер сборки следующим образом:

Kernel.Scan(x =>
{
    x.FromAssembliesMatching("*.dll");
    x.FromAssembliesInPath(".");
    x.WhereTypeInheritsFrom(typeof(DbContext));
    x.BindWithDefaultConventions();
    x.InTransientScope();
});

При попытке запустить мою программу из Visual Studio выдается следующее исключение:

Необработанное исключение: System.IO.FileNotFoundException: не удалось загрузить файл или сборку 'vshost32, версия = 10.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a' или одна из ее зависимостей. Система не может найти указанный файл.

Это выдается этой строкой кода:

x.FromAssembliesInPath(".");

Вот весь след стека:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'vshost32, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.Reflection.Assembly.Load(String assemblyString)
   at System.UnitySerializationHolder.GetRealObject(StreamingContext context)

   at System.AppDomain.Load(AssemblyName assemblyRef)
   at Ninject.Extensions.Conventions.AssemblyScanner.<FindAssemblies>d__10.MoveNext() in c:\Projects\Ninject\Maintenance2.2\ninject.extensions.conventions\src\Ninject.Extensions.Conventions\AssemblyScanner.cs:line 238
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at Ninject.Extensions.Conventions.AssemblyScanner.From(IEnumerable`1 assemblies, Predicate`1 filter) in c:\Projects\Ninject\Maintenance2.2\ninject.extensions.conventions\src\Ninject.Extensions.Conventions\AssemblyScanner.cs:line 300
   at Ninject.Extensions.Conventions.AssemblyScanner.FromAssembliesInPath(String path, Predicate`1 assemblyFilter) in c:\Projects\Ninject\Maintenance2.2\ninject.extensions.conventions\src\Ninject.Extensions.Conventions\AssemblyScanner.cs:line 325
   at Ninject.Extensions.Conventions.AssemblyScanner.FromAssembliesInPath(String path) in c:\Projects\Ninject\Maintenance2.2\ninject.extensions.conventions\src\Ninject.Extensions.Conventions\AssemblyScanner.cs:line 312
   at (Line for my code, `x.FromAssembliesInPath(".");`)
   at Ninject.Extensions.Conventions.ExtensionsForIKernel.Scan(IKernel kernel, Action`1 scan) in c:\Projects\Ninject\Maintenance2.2\ninject.extensions.conventions\src\Ninject.Extensions.Conventions\ExtensionsForIKernel.cs:line 43
   at (Line for my code, `Kernel.Scan(x =>`)
   at Ninject.Modules.NinjectModule.OnLoad(IKernel kernel) in c:\Projects\Ninject\Maintenance2.2\ninject\src\Ninject\Modules\NinjectModule.cs:line 60
   at Ninject.KernelBase.Load(IEnumerable`1 modules) in c:\Projects\Ninject\Maintenance2.2\ninject\src\Ninject\KernelBase.cs:line 222
   at Ninject.KernelBase..ctor(IComponentContainer components, INinjectSettings settings, INinjectModule[] modules) in c:\Projects\Ninject\Maintenance2.2\ninject\src\Ninject\KernelBase.cs:line 102
   at Ninject.KernelBase..ctor(INinjectModule[] modules) in c:\Projects\Ninject\Maintenance2.2\ninject\src\Ninject\KernelBase.cs:line 57
   at Ninject.StandardKernel..ctor(INinjectModule[] modules) in c:\Projects\Ninject\Maintenance2.2\ninject\src\Ninject\StandardKernel.cs:line 31
   at (Line for my code, `using(IKernel kernel = new StandardKernel(new SomeModule()))`)

1 Ответ

4 голосов
/ 13 декабря 2011

Это ошибка, но она больше не будет исправлена, потому что текущая бета-версия - это полное переопределение с новым интерфейсом.

Замена FromAssembliesInPath на From(Assembly.GetEntryAssembly()) должна сделать то же самое.(или удалите его полностью, если вы не создаете исполняемый файл) Все библиотеки DLL уже загружены FromAssembliesMatching("*.dll"), и единственной приемлемой сборкой exe является работающая сборка.

...