NET Framework GAC目录构造

本文详细解析了.NET Framework GAC目录的内部结构,包括GAC、GAC_MSIL、GAC_32、GAC_64及NativeImages目录的作用及区别,并解释了如何在目录中区分版本和程序集的引用过程。

转:http://www.yl1001.com/userzone.htm?doaction=article&art_id=5851381388387201

我们一般都知道,.NET Framework的GAC(global assembly cache)其实就是一个特殊的目录,如下图所示 

再谈CLR:.NET Framework GAC目录构造 
 
但是它内部到底是什么结构呢? 
 

再谈CLR:.NET Framework GAC目录构造 
 
    很奇怪对吧?两个图完全不一样。不要惊讶,其实第一个图只是一个特殊的呈现方式。GAC里面确实就只有几个目录而已 。
 
   一个比较完整的.NET Framework 2.0的GAC下子目录的结构如下所示:
 
GAC 
GAC_32 
GAC_MSIL 
GAC_64 
NativeImages1_v1.1.4322 
NativeImages_v2.0.50727_32 
NativeImages_v2.0.50727_64 
其中:
 
GAC是用于存放基于.NET Framework 1.0/1.1创建的Assemblies,这些Assemblies只能运行在32-bit 地址空间。
 
GAC_MSIL用于存放基于.NET Framework 2.0上的无特定CPU指定的Assemblies,这些assemblies可以运行在32-bit地址空间或者64-bit地址空间。
 
GAC_32也是用于存放基于.NET Framework 2.0创建的基于x86架构的Assemblies,因为这些Assemblies可以拥有32-bit的native CPU代码,所以只能运行在32-bit空间,可以直接在32-bit系统上运 行或者使用WOW64技术在64-bit的OS系统上运行。
 
GAC_64用于存放.NET Framework 2.0上创建的基于x64或者IA64的Assemblies,这些Assemblies可能含有x64或者IA64的Native Code,所以他们只能运行在64-bit地址空间上。这个目录在32-bit的 OS上不存在。值得注意的是,GAC_64中的Assemblies是根据系统架构决定,在x64系统上,该目录中的Assemblies就必须是基于x64的,IA64的Assemblies无法被装入,反之亦然。
 
以NativeImages开头的目录存放的通过NGen.exe编译assembly生成的基于当前平台的非managed代码,这个目录不需要Strongly named Assemblies,后面的数字对应了版本号。而基于.NET Framework 2.0的两个NativeImages目录名称最后的两个字符’64’和’ 32’则代表了对应的平台。
 
  那么,如果我们往里面去查看呢?会发现什么呢?
 

再谈CLR:.NET Framework GAC目录构造 
 
也就是说,在某个目录中(以GAC_MSIL为例),又按照程序集名称分了目录,例如System是一个程序集名称。它就有一个目录。
 
那么,它是怎么区分版本的呢?其实很简单,在程序集内部又按照版本号和公钥分了子目录。然后才可以看到真正的dll
 

再谈CLR:.NET Framework GAC目录构造 
 
这样做的目的是什么呢?就是说,即便程序集名称和版本都一样,但是签名的密钥是不一样的话,他们仍然是可以区分的。要知道,程序集名称和版本号完全可以设置成一样的,但密钥是不可能模 拟出来的。
    最后,我们需要谈一个话题,就是CLR在查找程序集时的行为模式?意思就是说,如果一个程序集,它需要引用另外一个程序集,那么CLR到底是怎么查找的
 
    好吧,有朋友可能会问:等等,CLR是怎么知道一个程序集需要引用另外的程序集呢?
 
    Good question! 其实这是必须的. 一个程序集不光包含代码,还包含了其他一些东西,例如程序集元数据, 类型元数据,以及资源等等.
 
   从下面的图形可以看到一个MANIFEST,它里面就有有关引用的信息
 

再谈CLR:.NET Framework GAC目录构造 
 
    查看MAINFEST,我想你就明白了吧 。看下图的assembly extern mscorlib。这说明什么呢?意思就是说目前的这个程序集需要用到mscorlib,而且版本和公钥是什么 
 

再谈CLR:.NET Framework GAC目录构造 
 
    Ok,那么如果知道了这些信息,CLR是怎么找到mscorlib的呢?它一般情况下是遵循下面的关系
 
1. 程序集的根目录
 
2. GAC(应该是先找平台相关的目录,例如GAC_32,GAC_64,然后找GAC_MSIL)
 
3.如果上面都找不到,则继续查找当前程序是否设置了特殊的私有路径。
 
如果以上都找不到,就报告一个错误,失败了
 
以上的过程是发生在运行期间的。
 
   那么在编译的时候,又是怎么样的呢?
 
1. 程序集的根目录
 
2. CSC程序的目录
 
3. GAC

 

折叠全部 展开全部 Win-10.0.22621.0 Quicker-1.44.13.0 动作ID:32e3bd82-843d-47b3-bffd-af542bba2932 来源动作: v0 Log文件路径:C:\Users\Administrator\AppData\Local\Temp\quicker_闹钟待完善_071018-143_log.html 定位文件 复制文件 上传并复制网址 开始执行动作:闹钟待完善 2025-06-27 19:10:18 42动作初始化 440运行C#代码 [in]失败后停止【值/表达式】False [in]运行模式【值/表达式】normal_roslyn [in]脚本内容【值/表达式】using System;\r\n using System.Threading;\r\n using System.Windows.Forms;\r\n \r\n public class AlarmScript\r\n {\r\n public static void Main()\r\n {\r\n int hour = 9; // 默认小时\r\n int minute = 0; // 默认分钟\r\n \r\n try\r\n {\r\n // 从 Quicker 变量获取值(注意类型转换)\r\n object varHour = Quicker.Variables["Hour"];\r\n object varMinute = Quicker.Variables["Minute"];\r\n \r\n if (varHour == null || varMinute == null)\r\n throw new Exception("输入为空");\r\n \r\n hour = Convert.ToInt32(varHour);\r\n minute = Convert.ToInt32(varMinute);\r\n }\r\n catch\r\n {\r\n MessageBox.Show("请确保 Hour 和 Minute 是有效的数字", "⏰ 输入错误", MessageBoxButtons.OK, MessageBoxIcon.Error);\r\n return;\r\n }\r\n \r\n // 构造目标时间\r\n DateTime alarmTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, hour, minute, 0);\r\n \r\n // 如果时间已过,则设为明天\r\n if (alarmTime < DateTime.Now)\r\n {\r\n alarmTime = alarmTime.AddDays(1);\r\n }\r\n \r\n MessageBox.Show($"闹钟已设定,将在 {alarmTime:HH:mm:ss} 提醒", "⏰ 闹钟设定成功", MessageBoxButtons.OK, MessageBoxIcon.Information);\r\n \r\n // 每秒检测一次是否到达时间\r\n while (true)\r\n {\r\n if (DateTime.Now >= alarmTime)\r\n {\r\n // 弹出提醒\r\n MessageBox.Show("⏰ 闹钟响了!你设定的时间到了!", "⏰ 闹钟提醒", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\r\n Console.Beep(800, 1000); // 系统蜂鸣声\r\n break;\r\n }\r\n \r\n Thread.Sleep(1000); // 每秒检查一次\r\n }\r\n }\r\n }\r\n [in]执行线程【值/表达式】auto 线程类型:Ui [in]引用DLL库【值/表达式】 异常:编译失败, Compilation, (36,30): error CS0234: The type or namespace name 'Variables' does not exist in the namespace 'Quicker' (are you missing an assembly reference?) (37,32): error CS0234: The type or namespace name 'Variables' does not exist in the namespace 'Quicker' (are you missing an assembly reference?) 代码: 1. using System; 2. using System.Text; 3. using System.Reflection; 4. using System.IO; 5. using System.Net; 6. using System.Net.Http; 7. using System.Collections; 8. using System.Collections.Generic; 9. using System.Collections.Concurrent; 10. using System.Text.RegularExpressions; 11. using System.Threading.Tasks; 12. using System.Linq; 13. using System.Threading; 14. using System.Windows.Forms; 15. 16. namespace __ScriptExecution { 17. 18. public class __yhorgxs9 19. { 20. 21. 22. // using System; 23. // using System.Threading; 24. // using System.Windows.Forms; 25. 26. public class AlarmScript 27. { 28. public static void Main() 29. { 30. int hour = 9; // 默认小时 31. int minute = 0; // 默认分钟 32. 33. try 34. { 35. // 从 Quicker 变量获取值(注意类型转换) 36. object varHour = Quicker.Variables["Hour"]; 37. object varMinute = Quicker.Variables["Minute"]; 38. 39. if (varHour == null || varMinute == null) 40. throw new Exception("输入为空"); 41. 42. hour = Convert.ToInt32(varHour); 43. minute = Convert.ToInt32(varMinute); 44. } 45. catch 46. { 47. MessageBox.Show("请确保 Hour 和 Minute 是有效的数字", "⏰ 输入错误", MessageBoxButtons.OK, MessageBoxIcon.Error); 48. return; 49. } 50. 51. // 构造目标时间 52. DateTime alarmTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, hour, minute, 0); 53. 54. // 如果时间已过,则设为明天 55. if (alarmTime < DateTime.Now) 56. { 57. alarmTime = alarmTime.AddDays(1); 58. } 59. 60. MessageBox.Show($"闹钟已设定,将在 {alarmTime:HH:mm:ss} 提醒", "⏰ 闹钟设定成功", MessageBoxButtons.OK, MessageBoxIcon.Information); 61. 62. // 每秒检测一次是否到达时间 63. while (true) 64. { 65. if (DateTime.Now >= alarmTime) 66. { 67. // 弹出提醒 68. MessageBox.Show("⏰ 闹钟响了!你设定的时间到了!", "⏰ 闹钟提醒", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 69. Console.Beep(800, 1000); // 系统蜂鸣声 70. break; 71. } 72. 73. Thread.Sleep(1000); // 每秒检查一次 74. } 75. } 76. } 77. 78. 79. 80. } 81. } 当前引用:C:\Program Files\Quicker\CommunityToolkit.Mvvm.dll C:\Program Files\Quicker\CSScriptLibrary.dll C:\Program Files\Quicker\Dapper.StrongName.dll C:\Program Files\Quicker\DotNetProjects.SVGImage.dll C:\Program Files\Quicker\DotNetProjects.Wpf.Extended.Toolkit.dll C:\Program Files\Quicker\FlaUI.Core.dll C:\Program Files\Quicker\FontAwesomeIconsWpf.dll C:\Program Files\Quicker\GongSolutions.WPF.DragDrop.dll C:\Program Files\Quicker\HandyControl.dll C:\Program Files\Quicker\HL.dll C:\Program Files\Quicker\ICSharpCode.AvalonEdit.dll C:\Program Files\Quicker\log4net.dll C:\Program Files\Quicker\MdXaml.dll C:\Program Files\Quicker\Microsoft.Bcl.AsyncInterfaces.dll C:\Program Files\Quicker\Microsoft.CodeAnalysis.CSharp.dll C:\Program Files\Quicker\Microsoft.CodeAnalysis.dll C:\Program Files\Quicker\Microsoft.Web.WebView2.Core.dll C:\Program Files\Quicker\Microsoft.WindowsAPICodePack.dll C:\Program Files\Quicker\Microsoft.WindowsAPICodePack.Shell.dll C:\Program Files\Quicker\NamedPipeWrapper.dll C:\Program Files\Quicker\NAudio.dll C:\Program Files\Quicker\Newtonsoft.Json.dll C:\Program Files\Quicker\Ninject.dll C:\Program Files\Quicker\NPOI.dll C:\Program Files\Quicker\PInvoke.User32.dll C:\Program Files\Quicker\PInvoke.Windows.Core.dll C:\Program Files\Quicker\Quicker.3rd.dll C:\Program Files\Quicker\Quicker.Common.dll C:\Program Files\Quicker\Quicker.exe C:\Program Files\Quicker\Quicker.Public.dll C:\Program Files\Quicker\System.Buffers.dll C:\Program Files\Quicker\System.Collections.Immutable.dll C:\Program Files\Quicker\System.Data.SQLite.dll C:\Program Files\Quicker\System.Memory.dll C:\Program Files\Quicker\System.Net.Http.Formatting.dll C:\Program Files\Quicker\System.Numerics.Vectors.dll C:\Program Files\Quicker\System.Reflection.Metadata.dll C:\Program Files\Quicker\System.Runtime.CompilerServices.Unsafe.dll C:\Program Files\Quicker\System.Threading.Tasks.Extensions.dll C:\Program Files\Quicker\ToastNotifications.dll C:\Program Files\Quicker\ToastNotifications.Messages.dll C:\Program Files\Quicker\WindowsInput.dll C:\Program Files\Quicker\Z.Expressions.Eval.dll C:\Windows\Microsoft.Net\assembly\GAC_64\PresentationCore\v4.0_4.0.0.0__31bf3856ad364e35\PresentationCore.dll C:\Windows\Microsoft.Net\assembly\GAC_64\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll C:\Windows\Microsoft.Net\assembly\GAC_64\System.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll C:\Windows\Microsoft.Net\assembly\GAC_64\System.Transactions\v4.0_4.0.0.0__b77a5c561934e089\System.Transactions.dll C:\Windows\Microsoft.Net\assembly\GAC_64\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Accessibility\v4.0_4.0.0.0__b03f5f7f11d50a3a\Accessibility.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_zh-Hans_b77a5c561934e089\mscorlib.resources.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\netstandard\v4.0_2.0.0.0__cc7b13ffcd2ddd51\netstandard.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationCore.resources\v4.0_4.0.0.0_zh-Hans_31bf3856ad364e35\PresentationCore.resources.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.Aero2\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.Aero2.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.resources\v4.0_4.0.0.0_zh-Hans_31bf3856ad364e35\PresentationFramework.resources.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework-SystemData\v4.0_4.0.0.0__b77a5c561934e089\PresentationFramework-SystemData.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework-SystemXml\v4.0_4.0.0.0__b77a5c561934e089\PresentationFramework-SystemXml.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework-SystemXmlLinq\v4.0_4.0.0.0__b77a5c561934e089\PresentationFramework-SystemXmlLinq.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\SMDiagnostics\v4.0_4.0.0.0__b77a5c561934e089\SMDiagnostics.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Globalization\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Globalization.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Caching\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.Caching.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.InteropServices.RuntimeInformation\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.InteropServices.RuntimeInformation.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.InteropServices.WindowsRuntime\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.InteropServices.WindowsRuntime.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Serialization\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Serialization.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.WindowsRuntime\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.WindowsRuntime.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Security.Cryptography.Algorithms\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Security.Cryptography.Algorithms.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ValueTuple\v4.0_4.0.0.0__cc7b13ffcd2ddd51\System.ValueTuple.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Controls.Ribbon\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Controls.Ribbon.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xaml\v4.0_4.0.0.0__b77a5c561934e089\System.Xaml.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationProvider\v4.0_4.0.0.0__31bf3856ad364e35\UIAutomationProvider.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationTypes.resources\v4.0_4.0.0.0_zh-Hans_31bf3856ad364e35\UIAutomationTypes.resources.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationTypes\v4.0_4.0.0.0__31bf3856ad364e35\UIAutomationTypes.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35\WindowsBase.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\WindowsFormsIntegration\v4.0_4.0.0.0__31bf3856ad364e35\WindowsFormsIntegration.dll C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.CSharp.dll C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Core.dll C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.dll C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Net.Http.dll C:\Windows\system32\WinMetadata\Windows.ApplicationModel.winmd C:\Windows\system32\WinMetadata\Windows.Data.winmd C:\Windows\system32\WinMetadata\Windows.Devices.winmd C:\Windows\system32\WinMetadata\Windows.Foundation.winmd C:\Windows\system32\WinMetadata\Windows.Graphics.winmd C:\Windows\system32\WinMetadata\Windows.Management.winmd C:\Windows\system32\WinMetadata\Windows.Media.winmd C:\Windows\system32\WinMetadata\Windows.Storage.winmd C:\Windows\system32\WinMetadata\Windows.UI.winmd 在 rTc1KTvzg91oKUEE8r7.TjNcIivIvOgHbN6UMi2.EsrWRQiFgnX(String , String , String ) 在 rTc1KTvzg91oKUEE8r7.TjNcIivIvOgHbN6UMi2.dWDWRgENtHN(String , String , ActionExecuteContext ) 在 Quicker.Domain.Actions.X.BuiltinRunners.Other.RunCsScriptStep.r52t34kc9u4(ActionStep , ActionExecuteContext , XAction , String , ThreadType ) 在 Quicker.Domain.Actions.X.BuiltinRunners.Other.RunCsScriptStep.<>c__DisplayClass62_0.s39AhW2xkks() 在 Quicker.Domain.Actions.X.XActionHelper.ExecuteCommonAction(ActionExecuteContext context, ActionStep step, XAction action, Func`1 actionFunc, Action successAction, Action failAction, StepInParamDef stopIfErrorParam, StepOutParamDef isSuccessOutputParam) 步骤(sys:csscript)执行失败,原因:编译失败, Compilation, (36,30): error CS0234: The type or namespace name 'Variables' does not exist in the namespace 'Quicker' (are you missing an assembly reference?) (37,32): error CS0234: The type or namespace name 'Variables' does not exist in the namespace 'Quicker' (are you missing an assembly reference?) 代码: 1. using System; 2. using System.Text; 3. using System.Reflection; 4. using System.IO; 5. using System.Net; 6. using System.Net.Http; 7. using System.Collections; 8. using System.Collections.Generic; 9. using System.Collections.Concurrent; 10. using System.Text.RegularExpressions; 11. using System.Threading.Tasks; 12. using System.Linq; 13. using System.Threading; 14. using System.Windows.Forms; 15. 16. namespace __ScriptExecution { 17. 18. public class __yhorgxs9 19. { 20. 21. 22. // using System; 23. // using System.Threading; 24. // using System.Windows.Forms; 25. 26. public class AlarmScript 27. { 28. public static void Main() 29. { 30. int hour = 9; // 默认小时 31. int minute = 0; // 默认分钟 32. 33. try 34. { 35. // 从 Quicker 变量获取值(注意类型转换) 36. object varHour = Quicker.Variables["Hour"]; 37. object varMinute = Quicker.Variables["Minute"]; 38. 39. if (varHour == null || varMinute == null) 40. throw new Exception("输入为空"); 41. 42. hour = Convert.ToInt32(varHour); 43. minute = Convert.ToInt32(varMinute); 44. } 45. catch 46. { 47. MessageBox.Show("请确保 Hour 和 Minute 是有效的数字", "⏰ 输入错误", MessageBoxButtons.OK, MessageBoxIcon.Error); 48. return; 49. } 50. 51. // 构造目标时间 52. DateTime alarmTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, hour, minute, 0); 53. 54. // 如果时间已过,则设为明天 55. if (alarmTime < DateTime.Now) 56. { 57. alarmTime = alarmTime.AddDays(1); 58. } 59. 60. MessageBox.Show($"闹钟已设定,将在 {alarmTime:HH:mm:ss} 提醒", "⏰ 闹钟设定成功", MessageBoxButtons.OK, MessageBoxIcon.Information); 61. 62. // 每秒检测一次是否到达时间 63. while (true) 64. { 65. if (DateTime.Now >= alarmTime) 66. { 67. // 弹出提醒 68. MessageBox.Show("⏰ 闹钟响了!你设定的时间到了!", "⏰ 闹钟提醒", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 69. Console.Beep(800, 1000); // 系统蜂鸣声 70. break; 71. } 72. 73. Thread.Sleep(1000); // 每秒检查一次 74. } 75. } 76. } 77. 78. 79. 80. } 81. } 当前引用:C:\Program Files\Quicker\CommunityToolkit.Mvvm.dll C:\Program Files\Quicker\CSScriptLibrary.dll C:\Program Files\Quicker\Dapper.StrongName.dll C:\Program Files\Quicker\DotNetProjects.SVGImage.dll C:\Program Files\Quicker\DotNetProjects.Wpf.Extended.Toolkit.dll C:\Program Files\Quicker\FlaUI.Core.dll C:\Program Files\Quicker\FontAwesomeIconsWpf.dll C:\Program Files\Quicker\GongSolutions.WPF.DragDrop.dll C:\Program Files\Quicker\HandyControl.dll C:\Program Files\Quicker\HL.dll C:\Program Files\Quicker\ICSharpCode.AvalonEdit.dll C:\Program Files\Quicker\log4net.dll C:\Program Files\Quicker\MdXaml.dll C:\Program Files\Quicker\Microsoft.Bcl.AsyncInterfaces.dll C:\Program Files\Quicker\Microsoft.CodeAnalysis.CSharp.dll C:\Program Files\Quicker\Microsoft.CodeAnalysis.dll C:\Program Files\Quicker\Microsoft.Web.WebView2.Core.dll C:\Program Files\Quicker\Microsoft.WindowsAPICodePack.dll C:\Program Files\Quicker\Microsoft.WindowsAPICodePack.Shell.dll C:\Program Files\Quicker\NamedPipeWrapper.dll C:\Program Files\Quicker\NAudio.dll C:\Program Files\Quicker\Newtonsoft.Json.dll C:\Program Files\Quicker\Ninject.dll C:\Program Files\Quicker\NPOI.dll C:\Program Files\Quicker\PInvoke.User32.dll C:\Program Files\Quicker\PInvoke.Windows.Core.dll C:\Program Files\Quicker\Quicker.3rd.dll C:\Program Files\Quicker\Quicker.Common.dll C:\Program Files\Quicker\Quicker.exe C:\Program Files\Quicker\Quicker.Public.dll C:\Program Files\Quicker\System.Buffers.dll C:\Program Files\Quicker\System.Collections.Immutable.dll C:\Program Files\Quicker\System.Data.SQLite.dll C:\Program Files\Quicker\System.Memory.dll C:\Program Files\Quicker\System.Net.Http.Formatting.dll C:\Program Files\Quicker\System.Numerics.Vectors.dll C:\Program Files\Quicker\System.Reflection.Metadata.dll C:\Program Files\Quicker\System.Runtime.CompilerServices.Unsafe.dll C:\Program Files\Quicker\System.Threading.Tasks.Extensions.dll C:\Program Files\Quicker\ToastNotifications.dll C:\Program Files\Quicker\ToastNotifications.Messages.dll C:\Program Files\Quicker\WindowsInput.dll C:\Program Files\Quicker\Z.Expressions.Eval.dll C:\Windows\Microsoft.Net\assembly\GAC_64\PresentationCore\v4.0_4.0.0.0__31bf3856ad364e35\PresentationCore.dll C:\Windows\Microsoft.Net\assembly\GAC_64\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll C:\Windows\Microsoft.Net\assembly\GAC_64\System.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll C:\Windows\Microsoft.Net\assembly\GAC_64\System.Transactions\v4.0_4.0.0.0__b77a5c561934e089\System.Transactions.dll C:\Windows\Microsoft.Net\assembly\GAC_64\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Accessibility\v4.0_4.0.0.0__b03f5f7f11d50a3a\Accessibility.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_zh-Hans_b77a5c561934e089\mscorlib.resources.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\netstandard\v4.0_2.0.0.0__cc7b13ffcd2ddd51\netstandard.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationCore.resources\v4.0_4.0.0.0_zh-Hans_31bf3856ad364e35\PresentationCore.resources.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.Aero2\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.Aero2.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.resources\v4.0_4.0.0.0_zh-Hans_31bf3856ad364e35\PresentationFramework.resources.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework-SystemData\v4.0_4.0.0.0__b77a5c561934e089\PresentationFramework-SystemData.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework-SystemXml\v4.0_4.0.0.0__b77a5c561934e089\PresentationFramework-SystemXml.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework-SystemXmlLinq\v4.0_4.0.0.0__b77a5c561934e089\PresentationFramework-SystemXmlLinq.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\SMDiagnostics\v4.0_4.0.0.0__b77a5c561934e089\SMDiagnostics.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Globalization\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Globalization.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Caching\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.Caching.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.InteropServices.RuntimeInformation\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.InteropServices.RuntimeInformation.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.InteropServices.WindowsRuntime\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.InteropServices.WindowsRuntime.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Serialization\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Serialization.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.WindowsRuntime\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.WindowsRuntime.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Security.Cryptography.Algorithms\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Security.Cryptography.Algorithms.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ValueTuple\v4.0_4.0.0.0__cc7b13ffcd2ddd51\System.ValueTuple.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Controls.Ribbon\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Controls.Ribbon.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xaml\v4.0_4.0.0.0__b77a5c561934e089\System.Xaml.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationProvider\v4.0_4.0.0.0__31bf3856ad364e35\UIAutomationProvider.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationTypes.resources\v4.0_4.0.0.0_zh-Hans_31bf3856ad364e35\UIAutomationTypes.resources.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationTypes\v4.0_4.0.0.0__31bf3856ad364e35\UIAutomationTypes.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35\WindowsBase.dll C:\Windows\Microsoft.Net\assembly\GAC_MSIL\WindowsFormsIntegration\v4.0_4.0.0.0__31bf3856ad364e35\WindowsFormsIntegration.dll C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.CSharp.dll C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Core.dll C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.dll C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Net.Http.dll C:\Windows\system32\WinMetadata\Windows.ApplicationModel.winmd C:\Windows\system32\WinMetadata\Windows.Data.winmd C:\Windows\system32\WinMetadata\Windows.Devices.winmd C:\Windows\system32\WinMetadata\Windows.Foundation.winmd C:\Windows\system32\WinMetadata\Windows.Graphics.winmd C:\Windows\system32\WinMetadata\Windows.Management.winmd C:\Windows\system32\WinMetadata\Windows.Media.winmd C:\Windows\system32\WinMetadata\Windows.Storage.winmd C:\Windows\system32\WinMetadata\Windows.UI.winmd 耗时:106ms 动作结束。耗时:171.3188ms
最新发布
06-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值