在.NET 4应用程序中加载.NET 4.5.2程序集,反射&参考

时间:2017-07-07 10:37:49

标签: c# .net reflection

允许在使用.NET 4框架编译exe的应用程序中加载.NET 4.5.2程序集(使用反射)。但是,如果我在开发期间引用该应用程序中的相同程序集(添加为任何其他程序集引用),则构建将失败。

为什么在运行时允许使用反射时允许在开发期间不允许的事情?

1 个答案:

答案 0 :(得分:1)

通过反射加载装配或者做任何事情都是" 这里有龙"在这种情况下,您承担风险,并对出现问题的任何事情作出反应(例如针对框架的更高版本而不是可用的程序集。)

在引用面向更高框架版本的项目时,我只看到编译器警告:

  

引用的项目' ProjectForNetFramework45'目标是比该项目的当前目标框架版本(4.0)更高的框架版本(4.6.1)。如果依赖项链中的任何项目都使用此项目目标框架之外的程序集中的类型,则可能导致构建失败。

而不是构建失败,直到我实际尝试调用v4.5程序集中的方法,此时弹出以下内容:

  

错误CS0400:类型或命名空间名称' ProjectForNetFramework45'无法在全局命名空间中找到(您是否缺少程序集引用?)

.net Framework的4.5版本是一个"就地更新"而不是新版本,请参阅notes in this Microsoft blog post about Compatibility of .NET Framework 4.5

  

.NET Framework 4.5是一个替换.NET Framework 4的就地更新(而不是并行安装)。我们的目标是使.NET 4.5完全向后兼容为.NET 4构建的应用程序(.NET 3.5和.NET 4.5将并排)。我们将在后面的文章中讨论.NET 3.5的兼容性故事。您将注意到的关于.NET 4.5的第一件事是版本号(4.0.30319)与.NET 4相同;这是其他就地更新所使用的做法。

这意味着,不是运行时的不同版本(即JIT,Garabage Collector等,虽然这些确实发生了变化!),但是较新的框架可能会向现有类添加新的类,接口和方法。提供更广泛的API以对抗。这是" netstandard"是为了增加清晰度。