如何解决"无法加载文件或程序集' Microsoft.Practices.Prism' "错误?

时间:2015-04-09 11:59:22

标签: c# wpf prism

过去几天我一直在搜索使用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: 

7 个答案:

答案 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,请确保取消阻止所有文件。