首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

“前.NET Core时代”如何实现跨平台代码重用 ——程序集重用

为了让读者朋友们对PCL的实现机制具有充分的认识,我们先来讨论一个被我称为“程序集动态绑定”的话题。 目录 一、何谓程序集动态绑定?...二、程序集一致性 三、程序集重定向 四、类型的转移 五、可移植类库(PCL) 一、何谓程序集动态绑定?...=neutral, PublicKeyToken=b77a5c561934e089 这个简单的实例体现了这么一个特征:运行过程中加载的.NET Framework程序集(承载FCL的程序集)是由当前运行时...在采用运行时Runtime1和Runtime2所在的执行环境下,真正绑定的目标程序集分别为“Retargetable, Version=2.0.0.0, Culture=neutral, PublicKeyToken...当CLR在定位目标程序集的时候就是根据这个标记决定是否需要重定向到当前运行时环境下与之匹配的程序集,并且这个程序集有可能在版本和公钥令牌均与元数据描述不同。

1.2K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C#反射与特性(二):探究反射

    在上一章中,我们探究了 C# 引入程序集的各种方法,这一章节笔者将探究 C# 中使用反射的各种操作和代码实践。...Microsoft Docs : 反射提供描述程序集、模块和类型的对象。 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后调用其方法或访问其字段和属性。...; 在运行时构建新类型( Emit 技术); 执行后期绑定,访问在运行时创建的类型上的方法; 访问程序集中类型的元数据: 其中包括像完整类型名和成员名这样的构造,以及对一个构造进行修饰的任何特性。....NET通过 C# 语言提供的诸多服务(例如动态绑定、序列化、数据绑定和 Remoting)都是依托于元数据的: 我们的应用程序可以充分地利用这些元数据,甚至可以通过自定义特性向元数据中添加信息。...packs\Microsoft.NETCore.App.Ref\3.0.0\ref\netcoreapp3.0\System.Console.dll"); // 获取当前控制台程序的程序集

    1.6K40

    CLR查找和加载程序集的方式(二) 流程图

    在前一篇文章《CLR查找和加载程序集的方式(一)》中详细介绍了CLR查找和加载程序的方式,分别介绍了配置与代码的实现方式。...本篇通过一个具体的流程图来帮助大家更加直观明了深入的掌握CLR查找DLL程序集的方式。 ?...说明: (1) 初始化绑定:从元数据中取出相关的AssemblyRef记录,并查看其中包括什么内容--它的外部程序集名称,它是否经过强命名,是否指定了文化等。...(2) 应用版本策略:这是一些由应用程序、被引用的共享程序集发布者或管理员生成的语句。这些语句包含在XML配置文件中,并且只是将程序集的特定版本(或一组版本)重定向到不同的版本。...需要注意的是,如果程序集是经过了强名称签名,则在定义codebase的时候,应该注明publicKeyToken。 关于probing与codeBase节点设置 1 <?

    76110

    .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题

    当你的项目中多个不同的项目以及不同的依赖存在不同的依赖程序集时,可能会因为依赖于不同版本的程序集而产生冲突。...而绑定重定向可以帮助解决不同程序集的依赖版本不同的问题,使整个程序使用统一个版本的 dll 来运行整个应用程序。 然而,如果我们就是需要使用一个分离的不同版本,那么我们就需要禁用掉自动生成绑定重定向。...对于上面的代码,指的是: 如果依赖中发现了任何 0.0.0.0-11.0.0.0 区间版本号的 Newtonsoft.Json 程序集的引用,都将使用 11.0.0.0 版本的。...如果以来中发现了任何 0.0.0.0-4.0.3.0 区间版本号的 System.ValueTuple 程序集的引用,都将使用 4.0.3.0 版本的(这个其实使用的 NuGet 包版本是 4.5)。...但是如果你编写了上一节中我们讲到的你需要引用同名程序集的多个版本的时候,如果依然自动生成绑定重定向,那么上面的功能会失效。 解决方法,便是禁用自动生成绑定重定向。

    1.2K40

    【B】替换 Quartz.net 默认使用的 MySql.Data 为 Mysqlconnector 的学习过程

    文章转载授权级别:B 无论是 Quartz.net 还是 MySql.Data 都是我们比较熟悉的库了,Quartz.net 如果配置为使用 MySql 数据库做持久化时,默认是硬编码了使用 MySql.Data...可以得到明确的错误提示:未能找到 MySql.Data 程序集 引用 MySql.Data 包并重新运行程序,可以发现程序正常运行了,结果如下: 2019-09-26 22:20:46 Greetings...' 这个结果很容易想到,因为两个程序集里有相同的命名空间,相同的类型,所以无法判断到底应该使用哪个类型。...答案也是比较容易想到的:它用了反射,指定了程序集和类型。...quartz.dbprovider.MySql.bindByName=true quartz.dbprovider.MySql.dbBinaryTypeName=Blob 果然,这里 hardcode 的程序为

    1.2K20

    Asp.Net 之 Web.config 配置文件详解

    在运行过程中asp.net应用程序会监视配置文件的变化情况,一旦编辑了这些配置信息,就会重新读取这些配置信息并缓存。...Cookie,并且指定会话状态模式为在进程中保存会话状态,同时还指定了会话超时为30分钟。...--标识特定于页的配置设置(如是否启用会话状态、视图状态,是否检测用户的输入等)。可以在计算机、站点、应用程序和子目录级别声明....--加的程序集引用,每添加一个程序集,就表示你的应用程序已经依赖了一个程序集,你就可以在你的应用程序中使用了--> 为 Web 应用程序配置缓存设置。cache:定义全局应用程序缓存设置。outputCache :指定应用程序范围的输出缓存设置。

    6K10

    ASP.NET MVC Controller激活系统详解:默认实现

    它先遍历通过BuildManager的静态方法GetReferencedAssemblies方法得到的编译Web应用所使用的程序集,通过反射得到所有实现了接口IController的类型,最后通过给定的...在静态构造函数中,我们调用BuildManager的GetReferencedAssemblies方法得到所有用于编译Web应用的程序集,并从中得到所有实现了IController接口的类型,这些类型全部被添加到通过静态字段...如果该元素存在并且值为False,则直接返回Null。...只有在该列表为空的时候才会通过遍历程序集和反射的方式得到所有实现了接口IController的公有类型,而被解析出来的Controller类型重写被写入ControllerTypeCache.xml文件中...下面的XML片断反映了这个用于Controller类型列表缓存的ControllerTypeCache.xml文件的结构,我们可以看出它包含了所有的Controller类型的全名和所在的程序集和托管模块信息

    1.3K90

    Silverlight自定义类库实现应用程序缓存

    但是如果多个SL项目都要引用相同的程序集时,这些dll会重复打包进每个xap文件,用户在加载多个xap时,实际上是重复下载了这部分dll文件,带宽使用率太低。...但是有一个问题,只有强命名的程序集可以这么做,如果是用户自己开发的类库,默认情况下就算你勾选了这个选项,最终还是会将dll一起打包进xap文件,如何也让自己开发的SL类库使用缓存呢?...步骤1:先为自己的SL类库程序集(使用强名称)签名 这一步可以借助vs2010完成,见下图 ?..." /> 解释一下: name 为SL类库程序集的完整名称 version 指版本号(必须与AssemblyInfo.cs中的版本号一致) publickeytoken...提示:如果您经过以上处理,vs.net仍然无法将程序集分离成zip包,请检查项目的引用中,该程序集的“复制本地”属性是否为false,如果不是,请更改为False ?

    87990

    解决方法:未能加载文件或程序集“Microsoft.Office.Interop.Excel。。

    .NET错误提示: 未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken...原因: 是GAC里没有Microsoft.Office.Interop.Excel组件,导致无法加载文件或程序集Microsoft.Office.Interop.Excel, 打开C:\WINDOWS\...assembly目录,应该是缺少名为Microsoft.Office.Interop.Excel的文件 解决方案: 只要装上Microsoft.Office.Interop.Excel组件就可以了 下载并安装...Office 2003 PIA(主Interop程序集,全称Redistributable Primary Interop Assemblies),这时再打开C:\WINDOWS\assembly目录,...你会发现Microsoft.Office.Interop.Excel组件,同时注意查看它的版本和PublicKeyToken是否与你所引用的相同,如果完全相同,你重启IIS就可以看到.NET正常运行了

    9.6K10

    C#——写一个控件库

    不过这个类库内定义了一系列自定义的控件。整个项目(类库+调用项目)结构大概是这个样 ? 请忽略Class2和ClassDiagram1.cd,这是我之前一个博文 用到的项目,留下来也无关紧要。...= null) { //TODO BtnTestClick(sender, e); } } 代码添加完毕后,在FormMain上加入的testUserControl1...指定默认属性后,当用户在Form里单击这个控件时,将在属性浏览窗口中自动选定该属性: [DefaultProperty("BtnName")] 2)Browsable:设置控件某一属性或事件是否出现在“...使用了Hidden后,即使在FormMain.Designer.cs里手动把上面那行赋值的代码加上,这行代码在程序重新编译后还是会消失。...、DefaultValue用于为属性指定另一个“默认值”等),如只是初步了解可以去查看VS从程序集 System.Windows.Forms.dll中反射出的各控件、控件属性、控件事件的声明和摘要(就是声明上面的绿字

    1.9K41

    程序员级别鉴定书(.NET面试问答集锦)

    Assembly.Load("foo.dll")加载程序集的方法是否正确? 强签名的程序集与非强签名的程序集有何不同? DateTime 可以为null吗? 什么是 JIT?什么是 NGEN?...对于程序运行速度而言是否有明显区别?为什么用,或为什么不用它? JIT是以assembly为单位发生还是以方法为单位发生?这对于工作区有何影响?...不对,正确方式为:Assembly.Load("foo, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3") 强签名的程序集与非强签名的程序集有何不同...: 程序集名称 Version=2.0.205.0: 程序集版本 Culture=neutral: 区域 PublicKeyToken: 程序集public密钥 public, protected, private...主互操作程序集(PIA)指的是官方发布的互操作程序集,如果电脑中安装了PIA,当你添加对类库的引用时,那么Visual Studio会自动加载PIA,微软为Office应用程序提供了PIA,如EXcel

    1.8K70
    领券