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

.NET 的程序集加载上下文

我们编写的 .NET 应用程序会使用到各种各样的依赖库。我们都知道 CLR 会在一些路径下帮助我们程序找到依赖,但如果我们需要手动控制程序集加载路径的话,需要了解程序集加载上下文。...带来的问题 .NET 加载程序集的这种机制可能让你的程序陷入一点点坑:你可以让你的程序加载任意路径下的一个程序集(dll/exe),并且可以执行其中的代码,但你不能依赖那些路径中程序集的特定类型或接口等...解决方法 实际上 .NET 推荐的唯一解决方法是创建新的应用程序域来解决非探测路径下 dll 的依赖问题,在创建新应用程序域的时候设置此应用程序域的探测路径。...- .NET Blog。因为你随时可以指定应用程序的探测路径,所以它可能让你的程序以各种不确定的方式加载程序集,于是你的程序将变得很不稳定;可能完全崩溃到你无法预知的程度。...来进行合并,如果你愿意,也可以使用 ILMerge: .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖 ---- 参考资料 Loading .NET Assemblies out

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

    获取.NET Core应用的版本号

    我们可以给.NET Core应用定义版本号,但如何在程序运行时读取呢?有几种做法。 首先,我们来看看一个典型的带有版本号的.NET Core工程。.../what-are-differences-between-assemblyversion-assemblyfileversion-and-assemblyin AssemblyVersion 引用你的程序集的其他程序集看到的版本...如果版本号改变,其他程序集必须更新引用。 AssemblyFileVersion 部署使用的版本号。你可以每次部署都增加版本号。这通常被安装程序使用。...用它来标记相同AssemblyVersion但由不同build产生的程序集。 在Windows中,可以用文件属性对话框看到它。 如果可能的话,让MSBuild去自动生成它。...AssemblyInformationalVersion 程序集所在的产品版本。这是你用来给用户显示的版本号。这可以是个字符串,比如'1.0 Release Candidate'。

    5.3K40

    .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖

    我们有多种工具可以将程序集合并成为一个。打包成一个程序集可以避免分发程序的时候带上一堆依赖而出问题。 ILMerge 可以用来将多个程序集合并成一个程序集。...,这样分发程序的时候只需要一个程序集即可。...如果你希望在你的项目当中进行尝试,可以把所有 /log 参数之后的那些程序集名称改为你自己的名称。 那么在编译的时候使用命令 msbuild /t:ILMerge 就可以完成程序集的合并了。...在这个编译目标执行的时候还会将原本的三个依赖删除掉,这样在生成的目录下我们将只会看到我们最终期望的程序集 Walterlv.Demo.AssemblyLoading.exe 而没有其他依赖程序集。...,如果是控制台程序,则为 exe /out 输出文件的名称(或路径)(此路径可以和需要合并的程序集名称相同,这样在合并完之后会覆盖同名称的那个程序集) /log 所有需要合并的程序集名称(或路径) /targetplatform

    2.9K30

    使Spring.NET的IOC容器支持动态加载的程序集

    当我们发布系统时,有时候希望不用关掉应用程序就能完成发布,但Spring.NET的ApplicationContext是从AppDomain.CurrentDomain中加载的程序集中创建对象的...当然,我们还需要一个FileSystemWatcher来监控程序集的目录,当目录中的程序集发生变化时,再把新的程序集复制到新的临时目录,然后再加载新临时目录中的程序集文件。...为了区分出哪个程序集才是最新的,我们还需要一个全局的dictionary来存放最新的程序集,这个dictionary以程序集的名字作为key,以最新的加载后的程序集作为value。...它的ResolveType的核心逻辑如下(位于Spring.Core.TypeResolution.TypeResolver中): public virtual Type Resolve(string...AppDomain.AssemblyResolve事件了,因为.net framework认为这个程序集它是可以识别的,不需要再触发这个事件了。

    70240

    ASP.NET MVC实现依赖注入

    #中的自定义容器有很多开源成熟的框架,例如AutoFac等,这里我们是自己实现一个轻量级的版本 源码地址:FastIOC: 轻量级IOC容器 这里就重点说一下如何在asp.net mvc中的使用,首先我们需要对需要注入的...Bean对象进行标记,这个标记就叫做Component, 在asp.net mvc Global文件中的Start方法中,我们需要将整个项目中需要自动注入的Bean加入到容器中 public class...public static void Init() { Container = new ContainerBuilder(); //获取所有程序集...= null) { //这里要使用GetRuntimeFields,此方法返回在指定类型上定义的所有字段,包括继承,非公共,实例和静态字段。...} } } return obj; } GetInstance方法就是实例化Bean对象的核心方法

    30220

    Attribute基本介绍

    MSDN:公共语言运行时允许你添加类似关键字的说明,叫做Attribute,它可以对程序中的元素进行标注,如类型、字段、方法和属性等.Attributes和Microsoft .NET Framework...在.NET中,Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化从而代码容易调试等等. 2、Attribute作为编译器的指令 Attribute作为编译器的指令数量不受限制...程序集,其修饰的方法必须是外部程序集的主入口。...static Attribute GetCustomAttribute():这个方法有8种重载的版本,它被用来取出施加在类成员上指定类型的Attribute。...Attribute施加到一个程序的元素上的时候,编译器先查找你的Attribute的定义,如果没有找到,那么它就会查找“Attribute名称"+Attribute的定义。

    77560

    仅反射加载(ReflectionOnlyLoadFrom)的 .NET 程序集,如何反射获取它的 Attribute 元数据呢?

    平时我们获取一个程序集或者类型的 Attribute 是非常轻松的,只需要通过 GetCustomAttribute 方法就能拿到实例然后获取其中的值。...但是,有时我们仅为反射加载一些程序集的时候,获取这些元数据就不那么简单了,因为我们没有加载目标程序集中的类型。 本文介绍如何为仅反射加载的程序集读取 Attribute 元数据信息。...---- 仅反射加载一个程序集 使用 ReflectionOnlyLoadFrom 可以仅以反射的方式加载一个程序集。...} 比如我们要获取这个程序集的版本号,正常我们写 assembly.GetCustomAttribute().Version,但是这里我们无法生成...)编译出来的程序集默认是不带 AssemblyVersionAttribute 的。

    2.3K30

    ​一款开源的.NET程序集反编译、编辑和调试神器

    咱们今天的主要内容是讲讲dnSpyEx(dnSpyEx是dnSpy项目的非官方Fork维护版本)这个开源的.NET程序集反编译、编辑和调试工具该如何使用。...4款免费且实用的.NET反编译工具 .NET反编译神器ILSpy怎么用?...dnSpyEx dnSpyEx是dnSpy(该代码库已于2020年12月21日被所有者归档为只读状态)项目的非官方Fork维护版本,一款开源、功能强大的.NET反编译工具和调试器,可用于在没有源代码的情况下编辑和调试程序集...支持调试 .NET Framework、.NET Core 和 Unity 程序集。 支持编辑 .NET Framework、.NET 和 Unity 程序集。.....TestSample\bin\Debug\net8.0 使用工具调试程序集中的代码 使用工具编辑程序集中的代码 使用工具编辑程序集中的IL指令 项目源码地址 更多项目实用功能和特性欢迎前往项目开源地址查看

    25710

    .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖

    ,这样分发程序的时候只需要一个程序集即可。...如果你希望在你的项目当中进行尝试,可以把后面那些代表程序集的名称改为你自己项目中依赖程序集的名称。 现在在编译的时候使用命令 msbuild /t:ILRepack 就可以完成程序集的合并了。...,后面没有前缀的参数都是需要合并的程序集的名称或路径。...这些需要合并的参数中,第一个参数是主程序集,而后续其他的都是待合并的程序集。区别主程序集和其他程序集的原因是输出的程序集需要有名称、版本号等等信息,而这些信息将使用主程序集中的信息。...而且这些依赖将成为合并后的程序集的依赖,不会合并到程序集中。

    2K50

    一个NET上的轻量级高性能网络程序框架

    今天给大家推荐一个NET上的轻量级高性能网络程序框架Mina.NET。支持TCP、UDP和串口等多种传输通道,能够帮助开发者快速地开发高伸缩性的应用程序。...Mina.NET是Apache MINA的.Net实现,它通过异步套接字提供了一个抽象的事件驱动的异步 API,以支持各种传输,例如 TCP/IP。...目录结构 Mina.NET 特点 统一的 API,支持各种传输类型: TCP/IP 和 UDP/IP(通过 .NET 异步套接字) 串口通信(RS232) 环回(应用程序内管道)通信 用户可以实现自己的传输类型...SSL · TLS 过载屏蔽和流量限制 基于流的 I/O 支持,通过 StreamIoHandler Mina.NET优势 简单易用:Mina.NET 提供了一个简单的 API,可以快速轻松地开发网络应用程序...高性能:Mina.NET 使用了 .NET 异步 I/O 技术,可以实现高性能的网络应用程序。 可扩展性:Mina.NET 提供了高度可定制的线程模型和过载屏蔽功能,可以满足各种需求。

    24430

    C#程序防多开又一法

    功能:可防止exe更名、挪动位置再运行的问题 实现思路: 在Main()方法开始时遍历所有进程,获取每个进程的程序集GUID和PID,若发现有跟自己GUID相同且PID不同的进程,就勒令自身退出。...因为程序集GUID是建立项目时就生成的,不随版本、内容的变化而变化,所以除非人为改动,否则同一项目编译若干次都还是那个GUID,用来判断程序集身份再适合不过。...题外,市面上常见的互斥体方法,互斥名也建议采用GUID; 2、之所以要加上进程ID的判断,是因为遍历的进程中已经包含自身进程,所以必须排除自身; 3、经尝试似乎只有.Net程序集才能获取到GUID(有点废话...{ try { //这儿之所以用Assembly.Load(byte[])获得程序集是因为该方法不会锁住文件...Guid proGUID = new Guid(((GuidAttribute)Attribute.GetCustomAttribute(Assembly.Load

    1.1K30

    .NET 将多个程序集合并成单一程序集的 4+3 种方法

    编写 .NET 程序的时候,我们经常会在项目的输出目录下发现一大堆的文件。除了我们项目自己生成的程序集之外,还能找到这个项目所依赖的一大堆依赖程序集。...四种方法 目前我已知的将 .NET 程序集与依赖合并到一起的方法有下面四种: 使用 .NET Core 3.0 自带的 PublishSingleFile 属性合并依赖 使用 Fody 使用 SourceYard...使用 .NET Core 3.0 这种自带的发布单一 exe 的方法会将你的程序的全部文件(包括所有依赖文件,包括非托管程序集,包括各种资源文件)全部打包到一个 exe 中。...下面说一些 .NET Core 3.0 发布程序集的一点扩展——.NET Core 3.0 中对于发布程序集的三种处理方式可以放在一起使用: 裁剪程序集(Assembly Trimmer) 提前编译(Ahead-of-Time...但是,如果希望对 Fody 进行更精细化的配置,可以阅读叶洪的博客: .NET 合并程序集(将 dll 合并到 exe 中) - Iron 的博客 - CSDN博客 Fody 在 GitHub 上开源:

    1.3K30

    .NETC# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)

    .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法) 发布于 2018-11-03 15:25...反射各方法的性能数据 我使用 BenchmarkDotNet 基准性能测试来评估反射各个方法的性能。测试的程序基于 .NET Core 2.1 开发。...基本上名称就代表着反射调用相同的方法。 你一定会说这张表不容易看出性能差距。那么我一定会放图: ? 那个 Expression_New 在图中独树一帜,远远把其他方法甩在了后面。那是个什么方法?...创建委托以大幅度提高反射调用的性能 - 吕毅 .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法) - 吕毅 对于创建对象更多的性能数据,可以参考: C# 直接创建多个类和使用反射创建类的性能...关于私有方法的反射: C# 使用反射获取私有属性的方法 C# 反射调用私有事件 关于缓存: .NET Core/Framework 创建委托以大幅度提高反射调用的性能 - 吕毅 .NET/C# 推荐一个我设计的缓存类型

    2.4K30

    一网打尽枚举操作 .net core

    本文介绍如何使用枚举以及,如何将枚举类型更好的应用于项目中,看完本文可以有序的将项目中的枚举更容易的使用到每个角落。...(Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) is DescriptionAttribute attribute)...(Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) is DescriptionAttribute attribute)...,Enum是Ftw类库下的一个文件夹,所有的枚举类都在Enum下边放着,EnumHelper是 2 中方法【GetEnumListModels】所在的类,通过反射程序集得到枚举类型,通过反射程序集将类型传入...比如 Gender的调用,假如 GetEnumList所在的controller是EnumController,那么调用就是通过 Enum/Gender ,对于.net core, mvc .net

    95410

    C#中的属性

    TIP:属性在编译的时候会嵌入到程序集中。我们可以使用反射来获得属性的值。 自定义属性 当.Net框架提供的属性不足以满足我们开发的要求时,我们可以自定义属性,自定义属性在项目中算比较常用的技术。...AttributeTargets是一个枚举,包括类、接口、方法、构造函数、枚举、程序集等枚举内容。...其实.NET框架为我们提供了Attribute.GetCustomAttribute()方法来访问属性,简单的用法如下: var carType = typeof(Carriage); var attributeType...反射的主要的作用是用来收集对象的数据而不是对象本身的数据。这些数据包括对象的类型、对象的成员的信息、特定程序集信息以及存储在元素属性中的任何信息。...最简单的反射是GetType()方法,代码如下: int myNum= 88; Type type = myNum.GetType(); Console.WriteLine(type); 我们还可以使用反射来获取关于包含给定类型的程序集的信息

    1.8K10
    领券