NET编译时都做了一些什么

编译时提示程序集引用找不到与.Net Framework 4 Client Profile 在Ioc容器的性能测试中,在Munq代码完编译时出现Error:“The type or namespace name 'Munq' could not be found (are you missing a using directive or an assembly refe 阅读详情

在新闻组和邮件列表里有大量关于一个.Net程序的设计编译(design-time or
run-time)和运行原理 (CPU-specific binary or pseudo-code)的疑问。

这里是一个简单的回答:当你编译一个C#应用程序或任何一种CLS(Commmon
Language Specification)兼容的语言时,它将首先被编译成一种称为IL
(Intermediate Language)的伪代码(pseudo-code)。在这个应用程序第一次
被运行的时候,这种IL代码将被编译成机器代码,用于执行。也就是说从源代码
到得到运行结果,进行了两次编译。事实上,只有那些被真正使用的函数代码
才会被进行第二次编译。下面揭示开发过程中被隐藏起来的细节:

1) 你用C#开发一些程序
2) 用C#编译器或CLS兼容的编译器编译成EXE
3) 编译器将生成的IL代码和附加信息(manifest)放入拥有一个标准PE头的Win32
可执行文件的只读部分。
4) 编译器在创建这个可执行文件时导入(import)一个名为_CorExeMain的函数。
这个函数是.NET EE(execution engine)--.NET运行期引擎的入口函数。
5) 当执行这个Win32可执行文件时,因为其主要是依赖于DLL的PE文件,操作系
统将会调用位于MSCorEE.DLL中的_CorExeMain函数。
6) 操作系统通过PE文件里的进入点,调用MSCorEE.DLL。并能保证在Windows里
可以有很多程序同时运行。
7) 因为操作系统不能执行.NET IL代码,EXE里的进入点只是简单的中介,它将
指示操作系统调用_CorExeMain函数。
8) 随后_CorExeMain函数开始解释位于PE文件中的IL代码。
9) 因为IL是不能被直接执行的, .NET EE使用称为JITter (Just In Time compiler)
的即时编译器将IL代码编译成本地CPU机器代码用于执行。这一即时编译过程
只在第一次执行的时候进行。

vue2 - 实现移动端H5网页调用手机相册选取图片或打开摄像头相机拍照上传,如何在h5网站浏览器中打开本机相册或相机选择相片,H5调用本地相册/相机上传图片详细教程(附图片压缩功能及上传服务器示例) vue2手机H5网页,调起安卓苹果ios手机相册和相机,H5实现调用手机摄像头相册实现图片压缩预览删除,vue项目调用摄像头和相册,H5调用手机摄像头,实时拍照上传,VUE2 H5页面如何唤起手机摄像头拍照上传,H5调起手机端的摄像头,html5调用手机摄像头,实现H5调起手机相机和相册,vue H5拍照上传,手机网站浏览器移动端调取相机或相册,实现拍照上传功能,解决苹果ios手机无法打开相册相机问题,无法唤起摄像头怎么办,调取本机系统的相册,vue h5网页调用相机拍照和相册,实现多张图片上传功能,图片压 阅读详情

相关推荐

我从华为身上学到的项目管理经验 -- 需求篇

记录这三年,关于项目管理上的一些心得体会 – 需求篇对于需求,我们可以根据不同的角色、理解拆分成三个过程:简单来说就是:需求分析原始需求、 需求拆分为系统需求、 需求实现为功能需求**需求分析**: 将客户需求 输出成 需求描述。 需求经理需要把 需求 转换成 客户能够接受的 初始需求 IR(Initial Requirement) 对于用户来说,我只管提 我的原始需求是

minminzhe520的博客 3万+

报告显示:风险环境和外挂类型关系密切 加速器外挂在模拟器环境里最多

近日,国内领先的手游反外挂服务商网易易盾对外发布了《2019年手游反外挂报告》(以下将简称“报告”),依靠其丰富的数据和深入的洞察,报告全面地呈现了手游外挂的真实情况。本篇文章,将和大家解读下报告里提及的风险环境与外挂种类之间的关系。 风险环境是指具有一定开挂风险,或者可以为作弊提供便利的手机环境。随着手机ROOT难度的增加,多数外挂使用者选择了模拟器、免ROO框架或者云真机进行游戏,方便使用外挂作弊。 目前,主要的风险环境包括: 模拟器:模拟安卓系统,可在PC端运行的安卓虚拟机; 云真

3033

MATLAB实战:5步搞定铣削稳定性叶瓣图(附完整代码解析)

本文提供了一份基于MATLAB的铣削稳定性叶瓣图实战指南。通过5个清晰步骤,从动力学原理出发,详细解析了利用半离散法构建稳定性判据、模块化代码设计、高效参数扫描及高级可视化的完整流程,并附有完整代码,帮助工程师快速预测和规避加工颤振,优化铣削工艺参数。

weixin_29197051的博客 196

VirtualBox 和 Vmware 的比较(转)

几星期前我的XP出了个毛病,每隔几分钟就出现键盘和鼠标没有响应,持续5、6秒钟,怀疑是病毒所致,可是却无从下手。加上这段时间大多数时间都在ubuntu下面,使用感觉很不错,于是有了使用它作为主操作系统的想法。可是我的工作要求使用windows下的工具进行编程和测试,完全摆脱windows是不可能了,只好在ubuntu里面用虚拟机装个XP。我的想法是这个XP只是工作用,越简单越好,只装必

四月的专栏 2万+

SAP生产订单成本‘还原’实战:从标准成本到实际费用,一步步拆解差异来源(附物料分类账提示)

本文深入解析SAP生产订单成本差异分析的全过程,从标准成本到实际费用的追踪方法,揭示差异根源的六维分析法。特别强调物料分类账(CKMLCP)在成本还原中的关键作用,帮助财务人员精准定位价格差异、用量差异等问题,提升制造业成本管理的效率和准确性。

weixin_28705087的博客 534

无网环境也能玩转DBeaver?手把手教你离线安装与ClickHouse连接(附实测jar包)

本文详细介绍了在无网环境下如何离线安装DBeaver并配置ClickHouse连接的完整指南。通过准备必备工具如DBeaver安装包、ClickHouse JDBC驱动及Maven本地仓库,确保在物理隔离环境中实现数据库管理。文章包含详细的安装步骤、驱动配置和性能优化建议,帮助开发者在严格网络限制下高效工作。

weixin_42635064的博客 376

.net是不是用的虚拟机技术?

看到个经典的回复特此收藏http://topic.csdn.net/u/20080527/10/b0b33dc3-888e-40b6-b887-8ae147412495.html?seed=1848905763  加为好友 发送私信 在线聊天 vrhero 人都是逼出来的... 等级: 可用分等级:中农 总技术专家分:15991 总技术专

cppfaq的专栏 1365

UE4项目迁移指南:如何无缝导入外部.uasset文件并保持材质关联

本文详细解析了将外部.uasset文件无缝导入UE4项目的专业方法。针对手动复制文件时常见的材质关联丢失问题,提供了使用引用查看器进行诊断和修复的实用技巧,并推荐使用引擎内置的“迁移”功能确保资源依赖关系的完整性,帮助开发者高效整合项目资源。

t8u9v0的博客 1046

.NET – 5个免费的反编译器

本文概述了5个免费的.NET反编译器。我们只关注您可以在非商业和商业环境中免费运行的免费工具。

寒冰屋的专栏 1万+

【UE 反射】反射的原理是什么?如何使用机制?

静态类型检查确保了类型的早期一致性和高效的代码执行,但减少了灵活性。动态类型检查提供了更大的灵活性,但增加了运行时的开销和潜在的错误。反射作为一种动态特性,无论是在静态类型语言还是动态类型语言中,都提供了强大的运行时类型操作能力,但也伴随着性能和安全性方面的权衡。通过理解这些联系,开发者可以在不同的编程语言和应用场景中选择适合的类型检查方式和反射机制,以实现所需的动态行为和灵活性,同时保证性能和安全性。

hhw_hhw的博客 6034

视觉提示学习(Prompt Learning):CV领域的GPT时刻?

视觉提示学习(Prompt Learning):CV领域的GPT时刻? ,人工智能,计算机视觉,大模型,AI,在人工智能技术不断演进的今天,计算机视觉(Computer Vision,CV)作为人工智能领域的重要分支,始终致力于让机器 “看懂” 世界。从早期基于传统特征工程的图像识别方法,到深度学习时代卷积神经网络(Convolutional Neural Networks,CNN)的崛起,CV 领域经历了多次重大变革。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

.NET编译时都做了一些什么

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 446

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之OS模块配置详解(中)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之OS模块配置详解(中)

weixin_42412049的博客 1516

NET编译时都做了一些什么 (转贴)

当你编译一个C#应用程序或任何一种CLS(CommmonLanguage Specification)兼容的语言时,它将首先被编译成一种称为IL(Intermediate Language)的伪代码(pseudo-code)。在这个应用程序第一次被运行的时候,这种IL代码将被编译成机器代码,用于执行。也就是说从源代码到得到运行结果,进行了两次编译。事实上,只有那些被真正使用的函数代码才会...

anyanyu2851的博客 80

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

NET编译时都做了一些什么 (转)

NET编译时都做了一些什么 (转)[@more@]在新闻组和邮件列表里有大量关于一个.NET程序的设计编译(design-time orrun-time)和运行原理 (cpu-specific binary or pseudo-...

ciya3282的博客 83

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

很喜欢VS.NET 2003对条件编译的代码提示

    VS.NET提供了一个条件编译参数,我们可以在Project-&gt;Properties-&gt;Configuration-&gt;Build里设置它,如下图:         用分号分开,可以支持定义n个条件变量 ,详细介绍在MSDN(Compiling Conditionally with Trace and Debug)中有。     条件编译不是什么新鲜的东西,而且是编译器支...

weixin_34268310的博客 90

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

使用基于Roslyn的编译时AOP框架来解决.NET项目的代码复用问题

介绍如何通过使用基于Roslyn的编译时AOP框架来解决.NET项目的代码复用问题。 可以在项目编译时自动插入指定代码,从而避免在运行时带来的性能消耗。 阅读全文

重典的博客 775

AspectInjector:终极.NET编译时AOP框架完全指南

AspectInjector是一个强大的.NET AOP(面向切面编程)框架,专为C#、VB等.NET语言设计。它通过编译时注入的方式,帮助开发者轻松实现横切关注点的分离,如日志记录、缓存管理、异常处理等,而无需运行时代理,从而保持应用程序的高性能和低开销。 ## 🚀 什么是AOP与AspectInjector? 面向切面编程(AOP)是一种编程范式,它允许开发者将横切关注点(如日志、事务、

gitblog_00790的博客 612

深入解析 @lancedb/lancedb 的 FunctionErrorsOptions:查询表上逐行 Function 错误的过滤配置

`FunctionErrorsOptions` 是 LanceDB JavaScript SDK(`@lancedb/lancedb`)中用于查询"逐行 Function 错误"(per-row Function errors)的可选过滤配置接口。它通过 `column`、`jobId`、`limit` 三个可选参数,让你精准定位批量计算列(computed column)刷新过程中被跳过的失败行

gitblog_01059的博客 1120

.NET Core 选项模式:编译时验证源代码生成技术详解

你是否曾为.NET应用配置验证的性能问题而苦恼?传统的运行时数据注解(Data Annotations)验证虽然方便,但在高并发场景下却成为性能瓶颈。随着.NET 8的发布,微软引入了编译时选项验证源代码生成技术,彻底改变了选项验证的游戏规则。 本文将深入解析这项革命性技术,带你从原理到实践全面掌握编译时验证的精髓。读完本文,你将能够: - ✅ 理解编译时验证与传统运行时验证的核心差异 - ✅...

gitblog_00322的博客 443

Metalama简介1. 不止是一个.NET跨平台的编译时AOP框架

Metalama是一个基于微软编译器Roslyn的元编程的库,可以解决我在开发中遇到的重复代码的问题。但是其实Metalama不止可以提供编译时的代码转换,更可以提供自定义代码分析、与IDE结合的自定义代码修复与代码重构功能 等功能。 经过面对文档的学习,发现Metalama可以做到很多非常神奇的事

重典的博客 838

Fody完全指南:探索.NET编译时IL编织的终极黑科技

Fody是.NET生态中一款革命性的编译时IL编织工具,它能在编译过程中直接修改程序集的中间语言代码,帮助开发者实现AOP编程、代码注入和自动化功能增强,无需运行时依赖。作为.NET开发的终极黑科技,Fody通过插件化架构支持数百种功能扩展,让代码优化和功能增强变得前所未有的简单高效。 ## 什么是IL编织?为什么选择Fody? IL编织(Intermediate Language Weavi

gitblog_00091的博客 649

Configonaut:.NET 强类型配置管理库,编译时安全与热重载实战

在软件开发中,配置管理是连接代码与运行环境的关键环节,其核心在于如何安全、高效地存取应用程序的各类参数。传统基于键值对的弱类型配置方式,如直接读取JSON或环境变量,容易在运行时因键名拼写错误或类型转换失败而引发难以预料的错误。为了解决这一问题,强类型配置应运而生,它通过将配置项映射为编程语言中的具体类型(如类属性),在编译阶段即可借助编译器进行类型检查,从而将错误暴露在开发早期,显著提升代码的健壮性。这项技术的价值在于,它不仅增强了代码的可靠性和可维护性,还通过提供智能感知(IntelliSense)支持

weixin_30437847的博客 782
下一篇: 在ASP.NET中面向对象的编程思想
iStringTheory
博客等级 码龄25年 414粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值