.net升级到4.0之后,出现;System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798

今天在做从Silverlight页中跳转到aspx页的时候,出现错误:

第一次跳转的时候就出现这个错误,然后在点跳转或者刷新这个错误页面,问题就没有了。

解决方案:

在C:\Program Files\Microsoft Silverlight\4.0.60831.0 这样的文件夹。找到System.Windows.dll,拷贝到web项目下的Bin目录下。

Ok,问题解决了!

最后谢谢http://www.haogongju.net/art/497239

<think>好的,我现在需要解决用户在使用ReflectionOnly API时遇到的程序集解析错误问题,特别是关于System.Windows版本5.0.5.0的依赖项预加载。用户提到使用ReflectionOnlyAssemblyResolve事件来预加载依赖项。首先,我得回忆一下ReflectionOnly加载上下文的工作原理,以及如何处理其中的依赖项解析。 首先,ReflectionOnly加载上下文不会自动解析依赖项,这点和普通的Assembly.Load不同。所以当使用ReflectionOnlyLoadFrom或类似方法加载程序集时,任何依赖的程序集都需要手动处理。这时候,需要订阅AppDomain.ReflectionOnlyAssemblyResolve事件,在事件处理中加载所需的依赖项。 用户的问题是关于System.Windows版本5.0.5.0的依赖项未能加载,导致解析错误。我需要确认System.Windows程序集的具体位置,通常可能在GAC或者NuGet包中。如果用户的项目引用了该程序集,可能需要从输出目录或引用路径加载。但需要注意版本是否匹配,5.0.5.0是否存在。 接下来,编写事件处理程序的代码示例是关键。需要展示如何在事件处理中检查请求的程序集名称,特别是当请求的是System.Windows, Version=5.0.5.0时,应该如何加载它。可能需要使用Assembly.ReflectionOnlyLoadFrom指定完整路径,或者尝试加载已存在的程序集。 另外,需要注意路径问题。用户需要替换示例中的路径为实际System.Windows程序集的位置。如果路径不正确,仍然会抛出异常。因此,可能需要指导用户如何找到正确的程序集路径,比如在项目的引用属性中查看,或者检查NuGet包的安装目录。 还有版本兼容性问题。如果用户的项目实际使用的是不同版本的System.Windows,比如5.0.6.0,那么加载5.0.5.0会导致问题。需要提醒用户确保版本一致,或者使用绑定重定向。不过,在ReflectionOnly上下文中,绑定重定向可能不起作用,因此手动加载正确的版本尤为重要。 此外,是否需要处理其他依赖项?比如,System.Windows可能有自己的依赖项,是否需要递归处理?这时候可能需要更复杂的事件处理逻辑,但用户当前的问题可能只需要处理特定的System.Windows依赖,所以示例代码可以专注于这个程序集,同时提到可能需要扩展处理其他依赖。 最后,总结步骤:订阅事件,编写处理程序加载特定程序集,并确保路径和版本正确。同时,提醒用户处理可能的异常和路径问题,以及考虑其他依赖项的情况。</think>针对使用ReflectionOnly API时出现的程序集解析错误问题,可通过`AppDomain.ReflectionOnlyAssemblyResolve`事件实现依赖项预加载。以下是具体解决方案: ### 解决方案步骤 1. **订阅事件** 在调用反射加载前注册事件处理程序: ```csharp AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += CurrentDomain_ReflectionOnlyAssemblyResolve; ``` 2. **实现事件处理逻辑** 通过程序集名称匹配目标依赖项并手动加载: ```csharp private static Assembly CurrentDomain_ReflectionOnlyAssemblyResolve( object sender, ResolveEventArgs e) { var requestedName = new AssemblyName(e.Name); if (requestedName.Name == "System.Windows" && requestedName.Version == new Version(5, 0, 5, 0)) { // 路径需替换为实际程序集位置 string assemblyPath = @"C:\Program Files\...\System.Windows.dll"; return Assembly.ReflectionOnlyLoadFrom(assemblyPath); } return null; } ``` 3. **执行反射加载** 使用`ReflectionOnlyLoadFrom`加载主程序集: ```csharp var assembly = Assembly.ReflectionOnlyLoadFrom("YourAssembly.dll"); ``` ### 关键说明 1. **路径有效性验证** System.Windows.dll需使用绝对路径定位,可通过以下方式获取: - NuGet包目录(如`packages\System.Windows\5.0.5\lib\netcoreapp3.1`) - 项目生成输出目录(需确保已正确引用) - GAC全局程序集缓存(使用`gacutil -l`查询) 2. **版本一致性原则** 若实际引用版本与代码中硬编码版本不一致,需修改`new Version(5,0,5,0)`参数匹配实际版本[^1] 3. **多依赖项处理扩展** 若存在多个依赖项,可扩展事件处理逻辑: ```csharp switch (requestedName.Name) { case "Dependency1": return LoadFromPath(...); case "Dependency2": return LoadFromPath(...); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值