制作域中立程序集的步骤是什么?

2024-05-04

...这些步骤也可以应用于第三方议会(可能已经是强名称的)吗?

我的问题的上下文应该不重要,但无论如何我都会分享:我正在考虑制作一个记录器(或日志包装器),它始终知道要定位的“日志源”,无论使用它的程序集是否是在一个应用程序域中,或分布在多个应用程序域中。我认为实现这一目标的一种方法是拥有一个具有静态“LogSource”属性的域中立程序集。如果在与域无关的程序集中设置该静态属性,我认为所有应用程序域都会看到它。


程序集没有以任何特定方式标记为领域中立。您不必给它们一些特定的属性来使它们与域无关。任何程序集都可以由 CLR 加载到共享域或触发程序集加载的域中,具体取决于 CLR 的配置CLR实例那就是加载程序集。

CLR 实例决定如何加载程序集由策略决定。有多种方法可以显式设置此策略:

  • set 加载器优化属性 http://msdn.microsoft.com/en-us/library/system.loaderoptimizationattribute.aspx在可执行文件的入口点(通常是 Main)。 CLR 加载程序将在启动可执行文件时应用指定的策略。
  • set the AppDomainSetup.Loader优化 http://msdn.microsoft.com/en-us/library/system.appdomainsetup.loaderoptimization.aspx从托管代码创建新的应用程序域时的属性。
  • CorBindToRuntimeEx http://msdn.microsoft.com/en-us/library/99sz37yh.aspx- 当从非托管代码启动 CLR 时,此函数允许您指定启动标志 http://msdn.microsoft.com/en-us/library/ms231027.aspx,其中一些控制加载器优化。

作为域中立加载的程序集将被加载到共享域中。应用域名是 CLRv4 中的“EE Shared Assembly Repository”。这不是真正的应用程序域,因为它没有数据并且无法运行任何代码。加载到其中的程序集将在所有其他正在运行的应用程序域之间共享其代码。程序集中的字节代码将仅进行一次 JIT 编译。然而,程序集中的所有可变数据都将在运行域之间复制。静态字段不在应用程序域之间共享。每个应用程序域的静态字段将被重复,并且当引用相同的静态字段时,不同的应用程序域将在内存中的不同位置读取和写入。

另外:还有另一种静态字段 - RVA 静态字段,它在当前进程中的所有应用程序域之间共享。无法在 C# 中声明这样的字段,但可以在 C++/CLI 中完成。

使用域中立程序集需要权衡。访问静态字段的速度较慢。由于它们仅进行一次 JIT 处理,但可以访问每个应用程序域静态字段的多个实例,因此对静态字段的任何访问都会经过额外的间接访问。当程序集直接加载到运行域中时,静态字段的地址可以直接嵌入到 JIT 代码中。但是,当编译到共享程序集中的代码尝试访问静态字段时,它必须首先加载当前域的上下文,然后在其中查找该域的静态字段地址。

决定是将程序集加载到共享域还是运行域取决于您的用例,更具体地说,您要创建多少个应用程序域以及要加载到其中的核心类型。

  • 如果加载运行本质上相同代码的多个域,您会希望尽可能多地共享程序集,除非它会严重损害访问静态字段的性能。一个示例是,为了隔离,应用程序决定在单独的应用程序域中运行自己的部分代码。
  • 如果您使用不同的代码加载多个域,则您只想共享所有不同程序集可能常用的程序集。这些通常是 .NET Framework 自己的程序集以及从 GAC 加载的所有程序集。运行 ASP.NET 应用程序时,IIS 默认以这种方式工作。
  • 如果您只使用一个应用程序域,则不应共享任何内容。常规的 GUI 应用程序就是这样。

注意:mscorlib 始终加载到共享域中。

来源和进一步阅读:

  • 应用程序域和程序集 http://msdn.microsoft.com/en-us/library/43wc4hhs.aspx
  • 领域中立的程序集 http://blogs.msdn.com/b/junfeng/archive/2004/08/05/208375.aspx
  • Essential .NET,第 1 卷,Addison Wesley http://www.amazon.ca/Essential-NET-Volume-Language-Runtime/dp/0201734117;第 8 章“AppDomains 和代码管理”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

制作域中立程序集的步骤是什么? 的相关文章

  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 如何更新我的流星项目中的 cordova-plugin-device ?

    当我运行流星项目时 我收到此警告 警告 尝试安装插件 电子邮件受保护 cdn cgi l email protection 但 它的最低版本应为 1 1 1 以确保与 当前平台版本 安装最小 版本以方便起见 但您应该调整您的依赖项 然后 我
  • Angular 2 中的 ag-grid 单元测试

    有人在 Angular 2 中对 ag grid 组件进行过单元测试吗 对我来说 测试用例运行时 this gridOptions api 仍然未定义 很抱歉参加聚会有点晚了 但几天前我一直在寻找这个问题的答案 所以想为最终来到这里的其他人
  • iOS 12.1 上的 UITabBar 项目在返回导航上跳跃

    我有一个 iOS 应用程序UITabBarController在主屏幕上 导航到隐藏的详细信息屏幕UITabBarController有设置hidesBottomBarWhenPushed true 返回主屏幕时UITabBarContro
  • 使用 EnableCors 时“请求的资源不支持 http 方法‘OPTIONS’”

    我想在 Asp net Web Api 中的一项特定操作上启用 CORS 我正在尝试这样做 Route api mycontroller myaction HttpPost EnableCors https example com post
  • 如何强制编译器在 C++ 中通过引用传递某些变量?

    这是一个简单的例子 template
  • 如何预渲染多个Vue应用页面?

    我正在尝试 未成功 在使用 Vue CLI 搭建的同一项目中预渲染多个 Vue 应用程序的 HTML 由于多种原因 我不想使用 Vue Router 或 Nuxt 等 我尝试过使用预渲染 Spa 插件 https github com ch
  • 关于 Python 解析器生成器的建议

    我接到一项任务 必须为简单的类 C 语言创建一个解析器 我可以使用任何我希望创建解析器的编程语言和工具 但我同时正在学习 Python 所以它是我的首选 我的解析器必须遵循一些限制 首先 它必须能够读取包含以下信息的文本文件 kind1 s
  • 在 IIS 中启用 JavaScript GZIP 压缩?

    我们希望使用 GZip 压缩庞大的 JavaScript 文件 以加快网站的页面加载速度 我知道这可以通过 IIS 来完成 但我似乎找不到关于如何实现它的简单分步指南 如果有人能向我指出这样的指南 我将非常感激 我以前从未这样做过 所以它需
  • 在 Dockerfile 中安装节点?

    我是AWS elastic beanstalk的用户 我遇到了一些问题 我想用 less node 构建我的 CSS 文件 但我不知道在使用 jenkins 构建时如何在 dockerfile 中安装节点 这是我在 docker 中使用的安
  • 对数组中的每个元素设置 $scope.$watch

    我想弄清楚如何设置 scope watch在数组中的每个元素上 我只关心每个元素的某些属性 在我的例子中 每个rental date对象具有三个属性 date start time and stop time 每当start time已更改
  • 如何从 firebase 导出无崩溃的用户?

    我想将有关崩溃和无崩溃用户指标的数据保留在数据库中以供进一步分析 我已经将该项目链接到 BigQuery 但找不到计算方法无崩溃用户BigQuery 中包含的数据价值 是否可以以某种方式导出无崩溃的用户指标 这里是 Fabric Fireb
  • 将 system.web 应用程序池添加到 web.config 会导致 500 内部服务器错误

    我正在尝试将以下内容添加到我的网络配置中
  • 如何从构建管道内的项目存储库中的azure存储blob下载文件(Azure DevOps)

    需要一种在构建过程中将一组文件从 Azure Blob 存储下载到项目存储库的方法 该流程的目的是对移动应用程序进行 CI CD 但是移动应用程序的图标 背景图像和一些其他图像是由其他应用程序提供的 因此在构建过程中图像应该从 blob 存
  • 访问 Spring-MVC 中的应用程序属性

    Spring MVC 的新手 我想在 properties 文件中存储两个属性 uploadFolder downloadFolder 在 HomeController 类 由 MVC 模板自动创建 中访问它 你能指导我如何 1 用上面的内
  • 自定义类上的 List.sum

    我有以下代表 GF2 字段的代码 trait GF2 def unary this def that GF2 GF2 def that GF2 GF2 def that GF2 that match case Zero gt throw n
  • 运行 istio-proxy 后启动容器/pod

    我正在尝试使用 Istio 和 Envoy 通过 Kubernetes 实现服务网格 我能够设置服务和 istio proxy 但无法控制容器和 istio proxy 的启动顺序 我的容器是第一个启动的 并尝试通过 TCP 访问外部资源
  • MSBuild 多个输出路径

    I saw this https stackoverflow com questions 14107302 msbuild copy multiple files to multiple directories repeatedlyS O
  • Java:使用反射正确检查类实例化

    我正在尝试使用最简单的反射形式之一来创建类的实例 package some common prefix public interface My void configure void process public class MyExamp
  • jQuery select2 与 WordPress

    我正在使用 jQueryselect2 https select2 org在 WordPress 内 我有一个像这样的 HTML 表格 如果用户点击我需要这里Bob SMith and admin它将转换为select2具有多项选择的下拉菜
  • 制作域中立程序集的步骤是什么?

    这些步骤也可以应用于第三方议会 可能已经是强名称的 吗 我的问题的上下文应该不重要 但无论如何我都会分享 我正在考虑制作一个记录器 或日志包装器 它始终知道要定位的 日志源 无论使用它的程序集是否是在一个应用程序域中 或分布在多个应用程序域