过去几天我一直在搜索使用Prism在WPF应用程序中修复错误,但是没有运气,并且我想看看Stackoverflow是否有任何想法。请注意,对于Prism来说,我绝对是一个菜鸟:)
我正在学习如何使用Prism创建应用程序,Unity是我选择的依赖注入容器。我尝试使用修改后的App.config文件加载模块,但是我收到了与引导程序相关的运行时错误。错误消息将比我提供的任何解释更准确,因此我已经包含App.config文件,出现错误的App.xaml.cs文件以及下面的错误信息。
请提前感谢您提供的任何见解,如果您有任何其他信息可能需要,请与我们联系!
编辑:错误中引用的此文件目录(C:\ Users \ Roger \ Documents \ TestPrismProject \ WpfApplication1 \ WpfApplication1 \ bin \ Debug \ WpfApplication1.exe.Config第4行)引用App.config文件的第四行(section name = ...)。我发现的所有教程和参考资料都与我所拥有的相同,但这仍然是造成问题的原因。
编辑2 :第一次修改中引用的行实际上与官方Microsoft Prism guide上的内容完全相同。
编辑3 :所以我从来没有找出造成这种情况的根源,但是在我的沮丧中,我重新启动了我正在完成的示例项目,并没有在新项目中得到错误。仍然不确定问题的根源是什么。
编辑4 :开个玩笑,新程序中又出现了同样的错误。
App.config中:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="modules" type="Microsoft.Practices.Prism.Modularity.ModulesConfigurationSection, Microsoft.Practices.Prism"/>
</configSections>
<modules>
<module assemblyFile="EmailModule.dll" moduleType="EmailService.ModuleDefinitions.Module, EmailService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="EmailModule" startupLoaded="true" />
</modules>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
App.xaml.cs(错误出现在&#34; bootstrapper.Run()&#34;行):
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace EmailClient
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
MyBootstrapper bootstrapper = new MyBootstrapper();
bootstrapper.Run();
}
}
}
错误讯息:
System.Configuration.ConfigurationErrorsException未处理 的HResult = -2146232062 Message =为模块创建配置节处理程序时出错:无法加载文件或程序集&#39; Microsoft.Practices.Prism&#39;或其中一个依赖项。该系统找不到指定的文件。 (C:\ Users \ Roger \ Documents \ TestPrismProject \ WpfApplication1 \ WpfApplication1 \ bin \ Debug \ WpfApplication1.exe.Config line 4) 来源= System.Configuration BareMessage =为模块创建配置节处理程序时出错:无法加载文件或程序集&#39; Microsoft.Practices.Prism&#39;或其中一个依赖项。该系统找不到指定的文件。 文件名= C:\用户\罗杰\文件\ TestPrismProject \ WpfApplication1 \ WpfApplication1 \ BIN \调试\ WpfApplication1.exe.Config 行= 4 堆栈跟踪: 在System.Configuration.BaseConfigurationRecord.FindAndEnsureFactoryRecord(String configKey,Boolean&amp; isRootDeclaredHere) at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object&amp; result,Object&amp; resultRuntimeObject) 在System.Configuration.BaseConfigurationRecord.GetSection(String configKey) 在System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) 在System.Configuration.ConfigurationManager.GetSection(String sectionName) 在Microsoft.Practices.Prism.Modularity.ConfigurationStore.RetrieveModuleConfigurationSection() 在Microsoft.Practices.Prism.Modularity.ConfigurationModuleCatalog.EnsureModulesDiscovered() 在Microsoft.Practices.Prism.Modularity.ConfigurationModuleCatalog.InnerLoad() 在Microsoft.Practices.Prism.Modularity.ModuleCatalog.Load() 在Microsoft.Practices.Prism.Modularity.ModuleCatalog.Initialize() 在Microsoft.Practices.Prism.Modularity.ModuleManager.Run() 在Microsoft.Practices.Prism.UnityExtensions.UnityBootstrapper.InitializeModules() 在Microsoft.Practices.Prism.UnityExtensions.UnityBootstrapper.Run(Boolean runWithDefaultConfiguration) 在Microsoft.Practices.Prism.Bootstrapper.Run() 在EmailClient.App.OnStartup(StartupEventArgs e)中的c:\ Users \ Roger \ Documents \ TestPrismProject \ WpfApplication1 \ WpfApplication1 \ App.xaml.cs:第21行 在System.Windows.Application。&lt; .ctor&gt; b__1(对象未使用) 在System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调,对象args,Int32 numArgs) 在MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,Delegate方法,Object args,Int32 numArgs,Delegate catchHandler) 在System.Windows.Threading.DispatcherOperation.InvokeImpl() at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state) 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) 在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态) 在System.Windows.Threading.DispatcherOperation.Invoke() 在System.Windows.Threading.Dispatcher.ProcessQueue() 在System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam,Boolean&amp; handling) 在MS.Win32.HwndWrapper.WndProc(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam,Boolean&amp; handling) 在MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) 在System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调,对象args,Int32 numArgs) 在MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,Delegate方法,Object args,Int32 numArgs,Delegate catchHandler) 在System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority,TimeSpan timeout,Delegate方法,Object args,Int32 numArgs) 在MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam) 在MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG&amp; msg) 在System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame框架) 在System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame框架) 在System.Windows.Threading.Dispatcher.Run() 在System.Windows.Application.RunDispatcher(Object ignore) 在System.Windows.Application.RunInternal(窗口窗口) 在System.Windows.Application.Run(窗口窗口) 在System.Windows.Application.Run() 在EmailClient.App.Main()的c:\ Users \ Roger \ Documents \ TestPrismProject \ WpfApplication1 \ WpfApplication1 \ obj \ Debug \ App.g.cs:第50行 InnerException:System.IO.FileNotFoundException 的HResult = -2147024894 消息=无法加载文件或程序集&#39; Microsoft.Practices.Prism&#39;或其中一个依赖项。该系统找不到指定的文件。 来源= System.Configuration 文件名= Microsoft.Practices.Prism FusionLog ====预绑定状态信息=== 日志:DisplayName = Microsoft.Practices.Prism (部分) 警告:为程序集提供了部分绑定信息: 警告:程序集名称:Microsoft.Practices.Prism |域ID:1 警告:仅提供部分程序集显示名称时发生部分绑定。 警告:这可能导致装订器装入错误的装配。 警告:建议为程序集提供完全指定的文本标识, 警告:它由简单的名称,版本,文化和公钥令牌组成。 警告:有关此问题的更多信息和常见解决方案,请参阅白皮书http://go.microsoft.com/fwlink/?LinkId=109270。 日志:Appbase = file:/// C:/ Users / Roger / Documents / TestPrismProject / WpfApplication1 / WpfApplication1 / bin / Debug / 日志:初始PrivatePath = NULL 调用程序集:System.Configuration,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a。 日志:此绑定在默认加载上下文中启动。 日志:使用应用程序配置文件:C:\ Users \ Roger \ Documents \ TestPrismProject \ WpfApplication1 \ WpfApplication1 \ bin \ Debug \ WpfApplication1.exe.Config 日志:使用主机配置文件: 日志:使用C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config中的计算机配置文件。 日志:此时策略未应用于引用(私有,自定义,部分或基于位置的程序集绑定)。 日志:尝试下载新的URL文件:/// C:/Users/Roger/Documents/TestPrismProject/WpfApplication1/WpfApplication1/bin/Debug/Microsoft.Practices.Prism.DLL。 日志:尝试下载新的URL文件:/// C:/Users/Roger/Documents/TestPrismProject/WpfApplication1/WpfApplication1/bin/Debug/Microsoft.Practices.Prism/Microsoft.Practices.Prism.DLL。 日志:尝试下载新的URL文件:/// C:/Users/Roger/Documents/TestPrismProject/WpfApplication1/WpfApplication1/bin/Debug/Microsoft.Practices.Prism.EXE。 日志:尝试下载新的URL文件:/// C:/Users/Roger/Documents/TestPrismProject/WpfApplication1/WpfApplication1/bin/Debug/Microsoft.Practices.Prism/Microsoft.Practices.Prism.EXE。
StackTrace:
at System.Configuration.TypeUtil.GetTypeWithReflectionPermission(IInternalConfigHost host, String typeString, Boolean throwOnError)
at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.Init(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord)
at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.InitWithRestrictedPermissions(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord)
at System.Configuration.RuntimeConfigurationRecord.CreateSectionFactory(FactoryRecord factoryRecord)
at System.Configuration.BaseConfigurationRecord.FindAndEnsureFactoryRecord(String configKey, Boolean& isRootDeclaredHere)
InnerException:
答案 0 :(得分:5)
解决方案最终变得简单,因为这些事情经常是......我没有将我的App.config文件的Build Action更改为“Resource”(可以通过单击App.config文件并查看属性部分)。
答案 1 :(得分:1)
我有相同的异常(Prism 5.0),我的解决方案是将配置部分的类型设置为Microsoft.Practices.Prism.Composition而不是我在许多示例中找到的Microsoft.Practices.Prism。
答案 2 :(得分:1)
将参考 Microsoft.Practices.ServiceLocation 添加到测试项目以解决此问题。
答案 3 :(得分:1)
在较新版本的Prism中(我使用的是6.3.0),ModulesConfigurationSection
类位于Prism.Wpf.dll
。
将您的配置更改为:
<configSections>
<section name="modules" type="Prism.Modularity.ModulesConfigurationSection, Prism.Wpf"/>
</configSections>
答案 4 :(得分:0)
StackTrace:at System.Configuration.BaseConfigurationRecord.FindAndEnsureFactoryRecord(字符串 configKey,布尔&amp; isRootDeclaredHere)at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(字符串 configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object&amp;结果,对象&amp; resultRuntimeObject)at System.Configuration.BaseConfigurationRecord.GetSection(字符串 configKey) System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(字符串 sectionName)at System.Configuration.ConfigurationManager.GetSection(字符串 sectionName)at Microsoft.Practices.Prism.Modularity.ConfigurationStore.RetrieveModuleConfigurationSection() 在
调用堆栈本身表明Prism已经加载,但是当它尝试解析.config文件时,RetrieveModuleConfigurationSection
发生异常。
你可以从那里开始检查可能是什么原因。
答案 5 :(得分:0)
我将Prism.Core版本6.2.1更改为6.2.0,它适用于我。
答案 6 :(得分:0)
我上次遇到过类似的问题。我的解决方案不同且非常具体,但错误是相同的。如果您要发送二进制文件并且目标PC使用Windows 10,请确保取消阻止所有文件。