- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我总是用 [assembly: ComVisible(true)]
将我的 .NET 程序集标记为对 COM 可见。 ,认为我永远不知道何时有人可能需要从 COM 调用他们。我也开始使用 FxCop 并开始从代码分析中看到这个警告:
CA1017 : Microsoft.Design : Because 'MyLibrary.dll' exposes externally visible types, mark it with ComVisible(false) at the assembly level and then mark all types within the assembly that should be exposed to COM clients with ComVisible(true)
最佳答案
关键是导出 COM 接口(interface)并不是免费的,因为存在不兼容性和必须满足的要求。这必须考虑并维护。 (警告 CA1017 暗示了这一点。)
因此,我一直使用“选择加入”理念而不是“选择退出”,即我没有让所有 COM 可见,而是将程序集标记为 COM 不可见。然后,我专注于有选择地公开类型\成员(即通过选择加入),并确保公开的 API 对于 COM 是合理的(例如,COM 不支持泛型、方法重载或带参数的构造函数)并且它具有已在考虑 COM 的情况下进行了测试。通过这种方式,将 API 暴露给 COM 以一种严格的、经过测试的、有界的和可维护的方式完成。
这与让所有 COM 可见然后担心以后可能出现的任何问题相反,请记住,如果您暴露了所有内容,那么可能会与您的 COM 接口(interface)的用户发生耦合,这是您没有预料到的,现在很难退出的。
根据内存,有几个意外后果的例子:
关于.net - 为什么不鼓励将程序集标记为 ComVisible(true)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3309764/
使用 [ComVisible()] 和 [ComVisibleAttribute()] 有什么区别?他们做的事情完全一样,有什么区别? 谢谢。 最佳答案 .NET 中的通用约定是所有属性类都以后缀 A
我正在为 Microsoft 认证考试而学习,我遇到了一个情况,其中的类不是 ComVisible,但有方法。我假设因为类对 COM 不可见,所以它的成员将不可访问。但是,显然即使类不是,成员也可以是
我遇到此错误 CA1405“Game1”被标记为 ComVisible(true) 但在其对象层次结构中具有以下 ComVisible(false) 类型:'Game' 在最初是 game1 类的内容
我正在为 Enterprise Architect 编写插件管理器。 加载程序集(插件 dll)时,我需要知道程序集中定义的哪些类型是 COM 可见的,因此我可以添加所需的注册表项以将其注册为 COM
我总是用 [assembly: ComVisible(true)] 将我的 .NET 程序集标记为对 COM 可见。 ,认为我永远不知道何时有人可能需要从 COM 调用他们。我也开始使用 FxCop
我正在考虑将一些用 VB6 编写的遗留 COM 代码迁移到 .NET,但这需要生成一个与原始代码非常接近的类型库。 我在早期绑定(bind)到其他 VB6 组件时遇到了传递参数数组的问题。在原始的 V
我有一个 DLL,它的 ComVisible 属性可能设置为 true,也可能没有。我不确定它是如何构建的,或者具有什么属性?我所知道的是它是一个.Net DLL。简单地说,我怎么知道它是否是 Com
我正在将 C++ 转换为 C++/CLI,并希望将一些托管类公开为 COM 对象。在 C# 中,这很容易,设置 [ComVisible] 并从接口(interface)(也是 ComVisible)继
我们有一个 COM 可见的 .NET exe(.NET 3.5、VS 2010 SP1、VB.NET)项目。 VB6 应用程序使用 CreateObject 从此程序集中创建对象。 如果我们不签署程序
问题 在同一个单线程 COM 客户端中实例化两个独立的 .NET COM 可见类时,.NET 将它们加载到同一个 AppDomain 中。 我猜这是因为它们被加载到同一个线程/进程中。 此行为的示例显
在 C# 类库 (.Net 3.5) 中,我有一个非常简单的类(一些字符串和长属性,没有方法)继承自 System.Web.Services.Protocols.SoapHeader .我的类被标记为
我的情况是,第三方应用程序加载了一组 VB6 Active X DLL 扩展。这些扩展的唯一限制是它们包含一组预定义的 IDispatch 函数。 是否有可能实现一个 COM 可见 .NET DLL,
我创建了一个用给定域名(我工作的公司)签名的 ComVisible DLL。我将这个 DLL 放到客户的 Web 主机上,它在不同的域下运行,并使用以下命令注册它:C:\Windows\Microso
我有 .NET 程序集,其中一些类标记为 ComVisible 此程序集已注册到 regasm/codebase "assembly_path" 我有 app.config 名称(实际上是 - MyA
请帮我回答 Comvisible-enabled 属性是否会减慢 .NET App 的速度? 最佳答案 否 - ComVisibleAttribute 只是一个惰性属性,直到有人查找它,然后根据存储在
当我传递一个 PHP 索引数组时: $myVar = new COM('MyClass'); $myVar->DubbleArray([1, 2]); ...它作为 System.Object[] 传
我继承了我工作的一个大型遗留 ASP.NET 应用程序,我们公司希望我们使用 FxCop 并修复所有主要的规则违规问题。目前似乎普遍存在的规则如下: CA1405: COM visible type
无法从 w/cscript 访问继承属性 (P1)。 类结构看起来像这样: [ComVisible] public interface IA { string P1{get;} } [Com
MSDN 有 this article about [ComVisible] attribute .我不太明白设置 [ComVisible(true)] 时会发生什么。 MSDN 说 The defa
当您在 Visual Studio 中创建新的 C# 项目时,生成的 AssemblyInfo.cs 文件包含一个指定程序集 GUID 的属性。属性上方的注释指出“如果此项目向 COM 公开”则使用它
我是一名优秀的程序员,十分优秀!