Проблема загрузки модулей в призму 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, я подозреваю, что второе решение более вероятно.