Проблема загрузки модулей в призму WPF C# после добавления в проект fody.costura

Я делаю проект в Prism WPF, и я хочу использовать fody.costura, чтобы иметь только один исполняемый файл и папку модулей Prism, когда я добавляю costura в проект и запускаю приложение, призма не находит модули в каталоге: .\ Модули Я уже пробовал все другие методы инициализации модулей, но загрузчик не находит их, важно сказать, что все зависимости моих модулей включены в первоначальный проект начальной загрузки.

Кто-нибудь знает, как решить проблему загрузки модулей в призму при использовании fody.costura?

--------------------редактировать-------------------------

Я добавляю код:

 protected override DependencyObject CreateShell()
        {
            return Container.Resolve<MainWindow>();
        }

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


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



        protected override void ConfigureModuleCatalog()
        {
            var moduleCatalog = (ModuleCatalog)ModuleCatalog;
        }

И ошибка, которую я получил, такова: длина строки не может быть нулевой.

StackTrace  "   en System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)\r\n   en System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)\r\n   en System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)\r\n   en System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)\r\n   en System.Reflection.Assembly.LoadFrom(String assemblyFile, Evidence securityEvidence)\r\n   en System.Activator.CreateInstanceFromInternal(String assemblyFile, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo)\r\n   en System.AppDomain.CreateInstanceFrom(String assemblyFile, String typeName)\r\n   en System.AppDomain.CreateInstanceFrom(String assemblyFile, String typeName)\r\n   en Prism.Modularity.DirectoryModuleCatalog.InnerLoad()\r\n   en Prism.Modularity.ModuleCatalog.Initialize()\r\n   en Prism.Modularity.ModuleManager.Run()\r\n   en Prism.Unity.UnityBootstrapper.InitializeModules()\r\n   en Prism.Unity.UnityBootstrapper.Run(Boolean runWithDefaultConfiguration)\r\n   en Prism.Bootstrapper.Run()\r\n   en NFE2018.App.OnStartup(StartupEventArgs e) en C:\\Users\\arman\\documents\\visual studio 2017\\Projects\\NFE2018\\NFE2018\\App.xaml.cs:línea 33\r\n   en System.Windows.Application.<.ctor>b__1_0(Object unused)\r\n   en System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)\r\n   en System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)"  string

Исключение появляется здесь:

 protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);


            var bootstrapper = new Bootstrapper();
            bootstrapper.Run();    <-------- Here
        }

1 ответ

Похоже, что проблема может быть не с Fody.Costura - убедитесь, что все модули копируются в выходной каталог (если вы используете MS Visual Studio, затем щелкните правой кнопкой мыши файлы и убедитесь, что "Copy to Output" В каталоге "выбрано" Всегда копировать "или" Копировать, если новее ".

Дайте мне знать, если это не решение, вам может потребоваться встроить зависимости модулей с помощью ILMerge (то есть включить их в отдельные модули).

---- РЕДАКТИРОВАТЬ ----
После небольшого размышления о том, как модули должны работать в Prism, я подозреваю, что второе решение более вероятно.

Другие вопросы по тегам