【问题标题】:Reflecting an older version of System.dll反映旧版本的 System.dll
【发布时间】:2013-03-18 14:47:20
【问题描述】:

我有一个构建活动,它反映了我们的一个库,以便将其与域定义进行比较。在反射期间,每当我尝试反射 Uri 时,它都会以 RunTimePropertyInfo 而不是 Uri 的形式返回,并且每当我检查任何反射属性时,都会收到一个异常说明...

"Could not load file or assembly 'System, Version=2.0.5.0, culture=neutral, publickeytoken=7cec85d7bea7798e, retargetable=yes"

构建活动是使用 System.dll 版本 4.0.0.0 编译的。我怀疑这是问题所在。有没有办法让我在旧版本的 System.dll 上反映类型。

到目前为止,这仅在 Uri 上失败了。有什么想法吗?

【问题讨论】:

  • 我尝试将我的构建操作重新指向同一个 system.dll,但这没有任何影响。值得注意的是,我所反映的库的 System.dll 版本来自 .net 4 可移植库。
  • 您正在混合框架目标,但效果不佳。 2.0.5.0 是 Silverlight 版本号。

标签: c# .net reflection uri


【解决方案1】:

我认为存在版本控制问题,如果您使用的是项目中使用的不同版本的 dll,那么可能会发生这种错误。

这是一个过去对我有用的简单解决方案,如果有同样的问题,它也会对你有用。 您可以通过定义有问题的 dll 的新旧版本,在 web.config 中使用“bindingRedirect”标签。所以这意味着它将忽略旧版本的 dll 引用并在找到时使用新版本。并且不会产生错误。

这里是参考链接。 http://msdn.microsoft.com/en-us/library/eftw1fys%28v=vs.71%29.aspx

【讨论】:

  • 谢谢,我尝试了您的建议,但没有帮助。我想我需要它做的是在反映不是新的 dll 时拿起旧的 dll。
  • 你能把你在 web.config 中写的代码复制到这里吗?如果问题仅与版本有关,它必须工作
  • 它可能不仅与版本相关联。这仅发生在一种数据类型“Uri”上。我只是要为此在我的日志中放置一个项目,并在它发生时跳过它。它将满足我们的需求。无论如何感谢您的帮助。
【解决方案2】:

你需要使用 IKVM.Reflection 之类的东西,

http://weblog.ikvm.net/PermaLink.aspx?guid=d0dc2476-471b-45f3-96bf-a90bc2f5800b

Microsoft 的反射与托管的 .NET Framework 相关联,因此您无法根据需要加载旧版本的核心库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 2017-04-24
    • 2015-04-21
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多