最近,我开始在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上切换了特定版本,但没有用。
答案 0 :(得分:3)
我设法解决了这个问题:
通过将未解析的程序集放在公共程序集文件夹中(使用k3b的fuslogvw工具找到),找到作者解决类似情况的this blog
遇到导致this SO post FileLoadException
的{{1}}。
下载log4net的新副本,取消阻止 zip文件,并替换VS和Public Assemblies文件夹中的引用。
但是,我仍然不确定为什么必须将此特定程序集放在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;
}