Visual Studio 2010 UnresolvedAssemblyException:类型Universe无法解析程序集:log4net

时间:2011-05-02 21:55:40

标签: wpf exception xaml log4net

最近,我开始在Visual Studio 2010 WPF设计器中遇到异常,似乎是由于log4net。如果我刚刚构建我的项目,XAML文件将在设计器中正确显示。然后,一旦我开始单击控件以在XAML中跳转,就会很快抛出此异常:

System.Reflection.Adds.UnresolvedAssemblyException

Type universe cannot resolve assembly: log4net, Version=1.2.10.0, Culture=neutral,    PublicKeyToken=1b44e1d426115821.

at System.Reflection.Adds.AssemblyProxy.GetResolvedAssembly()
at System.Reflection.Adds.AssemblyProxy.GetHashCode()
continues...

当我删除log4net引用时,问题才会消失。现在这是展示此行为的第二个项目。有没有其他人看过这个和/或找到了解决办法?

注意:我正在使用.NET 4 Full(不是客户端配置文件)而且我已经在log4net参考T / F上切换了特定版本,但没有用。

5 个答案:

答案 0 :(得分:3)

我设法解决了这个问题:

  1. 通过将未解析的程序集放在公共程序集文件夹中(使用k3b的fuslogvw工具找到),找到作者解决类似情况的this blog

  2. 遇到导致this SO post FileLoadException的{​​{1}}。

  3. 下载log4net的新副本,取消阻止 zip文件,并替换VS和Public Assemblies文件夹中的引用。

  4. 但是,我仍然不确定为什么必须将此特定程序集放在Public Assemblies文件夹中。我引用的所有其他程序集都不需要这一步。

答案 1 :(得分:1)

您可以使用属于dotnet sdk的“程序集绑定日志查看器”(Fuslogvw.exe)来查找何时以及为何加载了哪个DLL。如果启用了日志记录,它可以显示已加载程序集以及哪个程序集导致它加载。

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.80).aspx

有时dll存在,但版本错误。

如果将universe.dll包含到项目中,则还必须包含log4net.dll和local copy = true

答案 2 :(得分:1)

在项目属性/参考路径中添加程序集“log4net”的路径。

http://msdn.microsoft.com/en-us/library/6taasyc6(v=VS.100).aspx

答案 3 :(得分:1)

当我们遇到这个问题时,原来是由于我们用来添加引用的路径。

我们正在使用一些定义引用的自定义“.targets”文件。项目有很多混合依赖项,使用.targets文件有助于将引用定义在一个地方。

好吧,引用HintPath最终结果像......

<HintPath>C:\Program Files (x86)\\Custom\CustomControlsWPF2.2011\Source\\..\Binaries\WPF\Custom.Windows.Controls.dll</HintPath>

当我们删除双黑色标记时,替换为单个“\”,“Visual Studio 2010 UnresolvedAssemblyException:Type Universe无法解析程序集”错误消失了。

这应该是怎样的。

<HintPath>C:\Program Files (x86)\Custom\CustomControlsWPF2.2011\Source\..\Binaries\WPF\Custom.Windows.Controls.dll</HintPath>

答案 4 :(得分:0)

确保您的代码在设计时和运行时运行。如果您的代码在设计时运行,请不要认为Application.Current是您的应用程序。例如,当您使用Expression Blend时,Current是Expression Blend。导致自定义控件在设计时失败的典型操作包括:

-Casting Current to your custom subclass of Application.

-Using the FindName method on Current.

-Not checking whether Application.Current has returned a value that is null. If Visual Studio does not create an application object, then Application.Current may return null.

http://msdn.microsoft.com/en-us/library/ff356886%28v=vs.95%29.aspx

尝试一下。在函数的开头添加它:

// Check for design mode. 
if ((bool)(System.ComponentModel.DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
    return;
}