无法加载文件或程序集 > 'System.Windows, Version=2.0.5.0

5
在首次加载我的Silverlight应用程序时,我一直收到这个错误:
“无法加载文件或程序集'System.Windows, Version=2.0.5.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e'或其某个依赖项。系统找不到指定的文件。”
但是只需刷新页面,问题就会解决!
似乎这是Silverlight的已知错误: http://connect.microsoft.com/VisualStudio/feedback/details/464190/silverlight-compilation-problem-in-team-build-environment 他们提供了解决方法,但在我的情况下不起作用。
4个回答

7

实际上,将'System.Windows'程序集复制到输出目录中解决了我的问题。只需确保它被复制到您将执行应用程序的任何位置,而不仅仅是Debug文件夹。此外,还有一个非常好的替代方案,不会有类似的问题:SilverUnit


1

引用块 实际上,将'System.Windows'程序集复制到输出目录中解决了我的问题。只需确保它被复制到您将要执行应用程序的任何位置,而不仅仅是Debug文件夹。

在项目的引用文件夹中设置属性Copy Localtrue来复制您的程序集文件。

注意:如果您的项目使用.NET 2.0,请使用.NET Framework v2.0 SP2来解决此问题。


1

只需将此dll的引用System.Windows.Presentation.dll添加到您的项目中,因为您的项目正在请求System.Windows.dll,而该命名空间包含在System.Windows.Presentation.dll中。

dll的路径为:

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Windows.Presentation\v4.0_4.0.0.0__b77a5c561934e089

我曾经遇到过这个问题,将这个添加到我的项目中解决了这个问题。


1
检查一下你是否有类似以下代码的地方。
Assembly assembly = Assembly.Load(assemblyName);

如果您遇到这种情况,那么可能是由于加载了不适当的程序集名称(例如System.Windows)导致的。您可以直接使用引用库,或者从正确的程序集名称中加载它,就像这样:
foreach (var assemblyName in Assembly.GetExecutingAssembly().GetReferencedAssemblies()) 
            {                    
                if (assemblyName.ToString().Contains("PresentationFramework"))
                {
                    Assembly assembly = Assembly.Load(assemblyName);
                    Common.AddToLog(assembly.FullName);
                    Type[] allTypes = assembly.GetTypes();

                    foreach (Type type in allTypes)
                    {
                        if (type.IsSubclassOf(typeof(DependencyObject)))
                        {
                            allControlTypes.Add(type);
                        }
                    }
                }
            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接