为什么 regasm 会警告我不要用响亮的名字签约?

2023-11-26

如果我想让 .NET 程序集可用作 COM 服务器,我必须添加一组属性,然后使用regasm将其注册为 COM 服务器。

如果程序集未使用强名称签名regasm当运行时/codebase键显示一个RA0000警告说大会可能会干扰同一台计算机上的其他程序集我应该用一个强名字来签名,但注册成功了,甚至工作得很好。

AFAIK 强名称旨在防止所谓的 DLL 地狱。但 COM 的目的也是为了防止 DLL 地狱。如果我更改暴露给 COM 的任何接口,我必须更改 GUID 或至少保持二进制兼容性。因此,使用强名称签名似乎并没有添加任何有用的东西 - 没有什么可以阻止我破坏 COM 接口,然后使用相同的密钥对进行签名并拥有成熟的 DLL 地狱。

对于 COM 公开的 .NET 程序集,使用强名称签名有什么用?


这是一个笨拙的警告。 COM DLL Hell 有两个方面。真正糟糕的是修改公共接口而不是分配新的 GUID。未重新编译的客户端应用程序在调用完全错误的方法或使用令人讨厌的 AccessViolationException 进行轰炸时往往会崩溃并烧毁,而根本不知道原因可能是什么。

第二种是正确执行所有操作(分配新的 GUID),然后用新版本覆盖现有 DLL。您仍然会导致过时的客户端应用程序崩溃,但使用 E_NOINTERFACE hresult 会更温和地崩溃,该结果会生成非常具体的异常,帮助您诊断原因。但用户并没有感到更高兴。

That该场景在 .NET 中有一个现成的解决方案,GAC 支持并行部署具有不同版本号的程序集,以便新旧版本可以共存,并且过时的客户端应用程序继续使用旧版本。这需要一个响亮的名字。是的,当您使用 /codebase 时,该警告肯定会被抑制,因为这清楚地表明您不会使用 GAC。尽管在使用 /codebase 时稍微调整一下你的鼻子并没有什么坏处。此外,您在测试时永远不会在开发计算机上使用 GAC,但在部署时当然应该考虑它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 regasm 会警告我不要用响亮的名字签约? 的相关文章

  • project.json 等效于 InternalsVisibleTo

    Net Core 的项目 json https learn microsoft com en us dotnet articles core tools project json copyright允许配置传统 Net 应用程序使用通常放置
  • 点击浏览器后退按钮时如何刷新 ASP .NET MVC 页面

    我刚刚发现 当我单击任何 ASP NET MVC 页面上的浏览器后退按钮时 没有任何反应 并且页面不会更新 并且只有当您单击 F5 时才会更新 主要问题是我对页面的 DOM 进行了一些更改 即添加表格行 选择单选按钮等 当我通过点击浏览器后
  • Api 控制器中长时间运行的任务(使用 Web API,自托管 OWIN)

    我想在自托管 OWIN 环境中的 ApiController 中运行长时间运行的任务 例如 4 5 分钟 但是 我想在开始该任务后 一旦开始长时间运行的任务 就发回响应 而不等待它完成 这个长时间运行的任务与 HTTP 无关 并且顺序运行一
  • 如何在没有 Startup 类的情况下以编程方式启动 .NET 6 最小 API

    我正在尝试对我们的提供商项目实施 PactNet 合同测试 然而问题是 我们使用的是 Minimal API 因此我们没有将 Startup cs 和 Program cs 类全部整合到一个 Program cs 中 这提出了一个问题 因为
  • C# 数据表来保存表格(无限嵌套)

    我相对较新C 但来自C C 背景 我需要一个类似于的数据类型 类 DataTable 但允许存储的列保存 简单 类型 int float boolean string 以及相同类型的数据 以便一个列可以保存另一个表 该表也具有存储表等的列
  • Couchbase v6.0:更新文档内容而不重置文档过期(TTL)值

    我正在使用 Net Couchbase SDK CouchbaseNetClient Package 创建一个新文档 并在执行此操作时设置该文档的到期值 到期 TTL 值设置正确并且工作正常 问题陈述 创建文档后 我需要更新我使用 N1QL
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • .NET UI 元素线程限制的原因

    我们知道 除了实例化元素的线程之外 不可能从任何线程执行操作任何 UI 元素属性的代码 我的问题是 为什么 我记得当我们使用 COM 用户界面元素时 在 COM Visual Basic 6 0 时代 所有 UI 元素都是使用 COM 类和
  • 添加 LINQ 的 LongCount 扩展方法是否有实际原因?

    LINQ 有 2 种计算可枚举数的方法 Count and LongCount 实际上 这两者之间的唯一区别是第一个返回一个int 而第二个返回一个long 我不清楚为什么添加第二种方法 它的唯一用例似乎是处理超过 2B 元素的枚举 对我来
  • 使用Azure Service Fabric的默认客户端时如何向请求添加消息头?

    我想知道是否可以将自定义消息头注入到传出请求中以携带附加信息 而无需反序列化有效负载来完成身份验证 验证或请求关联等功能 例如通过消息检查器提供的 wcf Update 使用 SDK v2 您现在可以 相对 轻松地修改 Reliable S
  • 捕获特定的 WebException (550)

    假设我创建并执行一个System Net FtpWebRequest 我可以用catch WebException ex 捕获此请求引发的任何与 Web 相关的异常 但是 如果我有一些逻辑只想在由于以下原因引发异常时执行 550 file
  • 为什么在为 Silverlight 5 应用程序添加编码 UI 支持时 System.Core 无法加载?

    我遇到以下问题 尝试添加对为 Silverlight 5 应用程序创建编码 UI 测试的支持 MSDN 1 第一步是在 Silverlight 5 项目中引用程序集 Microsoft VisualStudio TestTools UITe
  • 应用服务中的内存利用率是否可​​以提高

    我有一个相当简单的 Web 应用程序在 Azure 的 B1 服务计划中的应用服务计划中运行 该计划提供 1 个 CPU 和 1 75GB RAM CPU 使用率永远不会超过 5 左右 内存使用率永远不会低于 52 我确实停止了计划中唯一运
  • 真的不可能使用返回类型重载吗?

    我用两种方法在MSIL中制作了一个小DLL float AddNumbers int int int AddNumbers int int 你们中有些人可能知道 MSIL 允许您创建具有相同参数的方法 只要您具有不同类型的返回类型 称为返回
  • 使 .net web api 队列请求以“单线程”方式运行

    我们有一个 c net Web API 服务调用代码 该代码无法一次处理多个数据库请求 该系统适用于需求相对较小的账单在线支付 我们无法控制代码来进行可以解决问题的更改 另一个使用相同代码的小组使用 WCF API 和服务配置将并发请求限制
  • MonoState、Singleton 或派生形式:CRUD 应用程序的最佳方法?

    我有一个相当大的 CRUD WinForm 应用程序 其中有许多对象 人员 注册 计划 案例注释等 该应用程序由 30 多种表单组成 UI 逻辑上被分解 会员 注册 计划 案例说明等 我正在尝试弄清楚如何创建我的人物对象搜索后搜索表格并将对
  • 使用 DependencyResolver 通过 MVC 3 进行控制器实例化时出错

    我正在使用 MVC 3 并在应用程序启动时使用以下代码 UnityContainer container new UnityContainer new UnityMappings container DependencyResolver S
  • MySQL - 多个结果集

    我正在使用 NET Connector 连接到 MySQL 在我的应用程序中 很少有线程使用相同的连接 因此如果 MySQLDataReader 尚未关闭并且某个线程正在尝试执行查询 则会出现该错误 已经有一个打开的 DataReader
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • Python 的 Tortoise ORM 不返回实体关系(Pyndantic、FastAPI)

    我正在制作一个示例 Fast Api 服务器 使用 Tortoise ORM 作为异步 orm 库 但我似乎无法返回我定义的关系 这些是我的关系 Category from tortoise fields data import Datet
  • 如何创建表达式>;

    是否可以创建Expression
  • n 个字符串的最长公共前缀

    给定 n 个最大长度为 m 的字符串 我们如何找到其中至少两个字符串共享的最长公共前缀 示例 花 流 你好 舰队 答案 fl 我正在考虑为所有字符串构建一个 Trie 然后检查分支到两个 更多子字符串 满足通用性 的最深节点 满足最长 这需
  • 为什么我会在不应为尺寸类别安装的约束上收到自动布局错误?

    我使用的是 iOS 8 我的笔尖启用了自动布局和尺寸类别 我在 IB 中制作了两种布局 一种用于任意宽度 任意高度 一种用于任意宽度 紧凑高度 我在 IB 中测试了不同的方向和设备尺寸 并且在 IB 中没有遇到约束问题 现在 当我在手机上运
  • 使用 R 从 Excel 工作表读取时如何检测时间

    问题是 当我使用 R 从 excel 工作表读取数据时read xlsx from openxlsx包 该TIME列转换为分数 这是一个例子 dfin lt DATE TIME 15 02 2015 8 00 AM 22 01 2014 1
  • 通过与数组进行模式匹配的多重赋值不适用于大写值

    看完之后这个答案我尝试自己使用这个不错的功能 并发现当我这样做时它没问题 scala gt val Array a b n XXX YYY ZZZ split a java lang String XXX b java lang Strin
  • 如何将 div 的内容作为 POST 参数发送?

    我有这个代码 div p p div 我可以获取 div 的内容并将它们作为 POST 参数发送 以便在 PHP 中使用它们吗 如果我可以使用 onchange this form submit 那就太好了 Thanks 无法发布内容div
  • VBA 另存为 PDF,文件名作为单元格值

    我正在尝试将四张纸保存到一个 PDF 中 下面的代码是我到目前为止所拥有的 当我在文件名中使用 ActiveSheet Name 命令时 它可以工作 但是当我将其更改为动态单元格的范围时 它不再工作并出错 任何帮助 将不胜感激 Sheets
  • Imagick 和 phmagick 出现问题:Postscript 委托失败/没有这样的文件或目录

    我正在使用 imagick 3 0 1 和 phmagick http www francodacosta com phMagick download 无论如何 当我尝试将 PDF 转换为 JPEG 时 两者都会出现同样的错误 例如 Pos
  • 特定 div 宽度上类似媒体查询的行为

    我正在构建一个编辑器 其中帖子的内容加载在 div 中 并且 jQuery 选择器允许我内联编辑内容 当我试图为模板的样式添加一些响应能力时 我遇到了一些障碍 在我的模板样式表中 我使用预览区域的特定 ID 来指定样式应应用的位置 我将相同
  • 如何在 Symfony2/Twig 模板中包含原始 HTML 文件?

    我正在 Symfony2 中开发一个项目 我有几小段 html 需要包含在我的主要视图之一中 根据 Twig 官方文档 我应该能够简单地使用 include filename html 但在 Symfony 中 除非文件名以 html tw
  • 使用 C# 进行高质量 JPEG 压缩

    我正在使用 C 并希望使用 JPEG 格式保存图像 然而 NET 降低了图像的质量 并以不够压缩的方式保存图像 我想以原始质量和大小保存文件 我正在使用以下代码 但压缩和质量与原始代码不同 Bitmap bm Bitmap Image Fr
  • 如何使用指定额外功能的轮子进行 pip 安装?

    我有一个包含附加功能的软件包 通常可以使用以下命令进行安装 pip install package extras 不过 我也可以通过wheels安装相同的包 指定一些wheel URL 如下所示 pip install package ur
  • 包含文件时 Node.js 上的引用错误

    我是新来的node js 我有两个文件 他们是index js and db js my index js is var connection require db js device new Device id 93 name test1
  • LINQ LEFT JOIN where 子句不起作用

    我需要返回所有事件的列表以及用户可能拥有的事件的任何回复 但是 无论我传递的用户名如何 它都会返回每个 rsvp 我的 linq 查询 gt return from events in this context Context Events
  • 防止 Android chrome 闲置/自动锁定/睡眠手机?

    我需要在网站上执行一些功能来禁用空闲 睡眠电话 有人尝试在安卓手机上做这个吗 有什么可能吗 我们强烈不鼓励开发人员这样做 然而这是可能的 您只需在页面上播放视频即可 设备不会进入睡眠状态 这意味着您可以将单帧视频设置为自动循环和播放 需要用
  • Socket.IO 连接无限循环

    Socket IO 在连接上产生无限循环 这很奇怪 直到现在才发生过 我不知道出了什么问题 我尝试重建包 从旧源复制一些代码 得到相同的结果 io on connection function socket console log some
  • 在模块中调用 UserForm_Initialize()

    我怎样才能打电话UserForm Initialize in a Module而不是 UserForm 代码对象 从模块 UserFormName UserForm Initialize 只需确保在您的用户表单中 像这样更新子项 Publi
  • PhoneGap - 与 Android 上的浏览​​器相比性能较差

    我使用jquery mobile 和phonegap 开发了一个android 应用程序 我通过 USB 将应用程序部署到我的设备上 该应用程序的性能非常糟糕 尤其是在滚动较长列表时 奇怪的是 如果我打开手机上的浏览器并直接访问index
  • 为什么 regasm 会警告我不要用响亮的名字签约?

    如果我想让 NET 程序集可用作 COM 服务器 我必须添加一组属性 然后使用regasm将其注册为 COM 服务器 如果程序集未使用强名称签名regasm当运行时 codebase键显示一个RA0000警告说大会可能会干扰同一台计算机上的