net
-
.NET中的程序集(Assembly)是什么?如何理解强名称和GAC?
程序集是.NET应用的基本单元,包含IL代码、元数据、清单和资源,支持部署、版本控制与安全;强名称通过公钥、版本等信息唯一标识程序集并确保完整性;GAC存储共享程序集,避免DLL冲突,实现多版本共存。 .NET中的程序集(Assembly)是应用程序的基本构建单元,它包含编译后的代码(通常是IL指令…
-
C#如何打包成exe文件 C# Visual Studio发布Windows应用程序
使用Visual Studio可将C#项目打包为独立exe文件。1. 右键项目选择“发布”,通过发布向导设置输出路径并生成文件。2. 在发布配置中选择“独立部署”模式,指定目标运行时如win-x64,并启用“自包含”以包含.NET运行时,使程序可在无.NET环境的电脑运行。3. 也可用命令行执行do…
-
.NET中的锁机制(lock, Mutex)是什么?如何处理多线程中的资源竞争?
答案:.NET中通过lock和Mutex等机制实现线程同步,lock用于进程内轻量级同步,Mutex支持跨进程互斥;结合细粒度锁、并发集合、无锁编程等策略可有效解决资源竞争问题。 在 .NET 中,多线程环境下多个线程同时访问共享资源时,容易引发数据不一致或竞态条件(Race Condition)。…
-
.NET中的单元测试是什么?如何使用xUnit或MSTest编写第一个测试?
单元测试用于验证代码逻辑正确性,.NET常用xUnit和MSTest框架。通过命令行创建项目并添加测试,编写Calculator类及其Add、Subtract方法。使用xUnit的[Fact]和[Theory]特性编写单测,或用MSTest的[TestMethod]和[DataRow]实现相同功能,…
-
.NET中的线程池是什么?如何高效地利用它来处理并发任务?
答案:.NET线程池通过复用线程提升性能,推荐使用Task.Run和async/await处理异步任务,区分CPU与I/O密集型操作,避免阻塞调用,合理控制并发量,防止线程饥饿与死锁,以充分发挥并发效率。 .NET中的线程池是一种用于管理多个线程的基础设施,它通过复用一组已创建的线程来执行异步任务,…
-
.NET怎么实现文件的上传和下载功能
首先实现文件上传功能,通过IFormFile接收文件并保存到服务器指定目录;接着实现文件下载功能,使用PhysicalFile或File返回文件流;最后需注意限制文件大小、验证类型、重命名文件及存储安全。 .NET 实现文件上传和下载功能非常常见,尤其是在 Web 应用中。使用 ASP.NET Co…
-
C#的global using是什么?如何减少重复的using指令?
global using是.NET 6引入的特性,通过在using前加global关键字,使命名空间在整个项目中全局生效,减少重复引用。只需在GlobalUsings.cs等单个文件中声明,即可自动应用到所有源文件,支持普通命名空间、static using和别名(如global using Jso…
-
.NET中的中间件(Middleware)是什么?如何在ASP.NET Core中自定义一个?
中间件是ASP.NET Core中处理HTTP请求和响应的组件,按注册顺序组成管道,可执行前置逻辑、短路请求或后置处理。推荐通过类定义中间件,包含构造函数和InvokeAsync方法,并在Program.cs中用UseMiddleware注册;也可使用app.Use内联定义。执行顺序由注册顺序决定,…
-
.NET中的泛型(Generics)是什么?如何创建自己的泛型类和方法?
.NET泛型通过类型参数实现类型安全、性能提升和代码复用;可定义泛型类如MyStack和泛型方法如Swap;支持约束如where T : class, new()确保类型符合条件,提升灵活性与安全性。 .NET中的泛型(Generics)是一种允许在定义类、方法或接口时使用类型参数的机制。它让开发者…
-
.NET中的弱引用(WeakReference)是什么?如何用它来解决缓存内存泄漏问题?
使用弱引用可避免缓存导致的内存泄漏,因强引用会阻止垃圾回收,而弱引用允许对象被回收。通过 WeakReference 存储缓存项,尝试获取对象时检查其是否仍存活,若已被回收则重建并更新缓存。适用于可再生资源的缓存场景。 在 .NET 中,弱引用(WeakReference)是一种特殊的引用类型,它允…