问题标签 [extensibility]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1087 浏览

.net - 您将如何强制 System.Net.Socket.Connect() 方法使用 socks 代理(代码注入与外部自定义代理)

我正在使用 WCF 的 netTcpBinding,它直接连接到一个端点,并且似乎对 socks 代理一无所知。

我需要使用代理,因为我的大多数客户端都不允许直接出站连接,并且始终强制使用 socks 代理。

  • 我的第一个想法是配置 .net 框架来做到这一点,所以我编辑了 machine.config 文件如下,但它似乎只适用于 http 代理(不是袜子)

    /li>
  • 我的第二个选择是实现从 netTcpBinding 继承的自定义绑定,并且仅覆盖连接逻辑以添加代理代码。

    我已经分解了 System.ServiceModel 程序集,不幸的是,很多类都标记为内部类(包括 SocketConnectionInitiator、ConnectionPoolHelper、ClientFramingDuplexSessionChannel 和 FramingDuplexSessionChannel,可能还有其他类)

    这使得创建自定义 netTcpBinding 成为一项巨大的工作,而且在交付新版本的 .net 框架时可能会导致一些问题。

  • 另一个想法是将一些代码直接注入到 Socket.Connect() 方法中。这很容易实现,但我对修改.net框架的内部代码不是很有信心。此外,虽然套接字类没有标记为密封,但我害怕破坏某些东西,尤其是在框架的后期版本中。

  • 我现在的最后一个想法:我可以创建一个小代理工具,与我的软件在同一台计算机上运行,​​它会自动连接到公司的 socks 代理,并向真正的 socks 代理发出良好的“连接服务器”命令.

我认为后一种选择更好,但我很想听听其他人的意见。

你怎么看?

0 投票
6 回答
1452 浏览

.net - 添加插件支持:要继承的接口或基类?

我正在为我的 .NET 应用程序添加插件支持。基类对我来说听起来很合理,因此人们可以继承它并覆盖某些调用,也可以保留默认功能或使用一些内部帮助函数。

为什么我要选择接口而不是基插件类来继承?你能告诉我应该选择哪种设计,为什么?

0 投票
1 回答
119 浏览

visual-studio - 将文件添加到项目时会引发什么事件?

在项目(.vcproj 或 .csproj)中添加/删除新文件或现有文件时会引发哪些事件?

我实际上想处理所有可能的事件,这些事件可能会根据添加或删除的项目项改变项目结构。

这是在为 Visual Studio 创建加载项的上下文中。任何人都可以告诉我至少事件名称,以便我查找吗?

0 投票
1 回答
288 浏览

visual-studio - 加载项文件中的巨大 AboutIconData 块

在我为 Visual Studio 生成的 .addin 文件中,我在AboutIconData属性下得到了非常大的二进制数据。谁能建议为什么这些数据会随着时间的推移而不断增长,以及我是否可以安全地删除它?

0 投票
7 回答
372 浏览

c# - 无需开源的可扩展性

我的公司目前正在用 C# 创建一个大型多层软件包。我们对该结构采用了 SOA 方法,我想知道是否有人对如何使其具有编程知识的用户可扩展有任何建议。

这将涉及两个过程:生产系统管理员批准使用特定插件,以及实际插件架构本身。

我们希望允许用户编写脚本来执行常见任务、修改用户界面的布局(用 WPF 编写)并添加新功能(即允许制表数据的图表)。有没有人对如何实现这一点有任何建议,或者知道从哪里可以获得做这种事情的知识?

我认为这将是发布具有限制分发许可证的开源软件的完美角落案例,但是,我并不热衷于允许竞争对手访问我们的源代码。

谢谢。

编辑:我想我只是澄清一下为什么我选择了我所做的答案。我指的是我公司外部的生产管理员(即客户),并让他们以某种方式以更简单的方式自动化/编写脚本,而不需要他们完全了解 c#(他们大多是编程有限的最终用户经验)-我更多地考虑的是DSL。这可能是一个遥不可及的目标,而托管可扩展性框架似乎提供了迄今为止最好的折衷方案。

0 投票
1 回答
122 浏览

asp.net - asp.net 设计器如何获取设计的页面类型

我想在 Web 控件中找出在 Visual Studio 2008 中设计的页面的真实类型。

我可以获得 WebFormsRootDesigner,不知何故我知道有可能获得

aspx 页面的文件路径。

我宁愿获取该页面的 ProjectItem,因为让控件解析文件会有点过头了,但我找不到这样做的方法。

从aspx页面的projectitem我不知道如何获取页面类......

我希望我的 web 控件在设计时根据页面类型表现不同。

谢谢

0 投票
0 回答
684 浏览

java - 17 年后修复 C++ 运行时可扩展性是否为时已晚?

1992 年到 1993 年的时间框架对于 C++ 来说是至关重要的。

在 '92/'93 时间框架内,我为 Aldus PageMaker 开发了一个插件架构,它是用 C++ 编码的。PageMaker 建立在一个名为 VAMP 的 C++ OOP 框架之上,这有助于其在 Mac OS 和 Windows 之间的可移植性。

所以我们尝试利用C++的特性来构建插件架构。由于所谓的脆基类问题,这被证明对于 C++ 类来说是非常有问题的。

我继续写了一篇发表在期刊上的论文,并在 OOPSLA '93 的反思研讨会上发表。你可以阅读我在这里展示的论文的 pdf 格式:

C++ 可演化类的时不变虚拟成员函数调度 (页面到底部并单击查看或下载

我还在波特兰举行的 Usenix 会议上与 Bjarne Stroustrup 取得了联系,并继续与他进行了几个月的对话,在那里他代表我提出了处理易碎基类问题的问题。(唉,当时认为其他问题更重要——例如,试图通过批准来阻止 RTTI。)

微软此时推出了适用于 Windows 平台的 COM/DCOM 系统,被视为解决该问题的可行方案。通过用于定义 COM 接口的抽象类,C++ 可以用作 COM 的实现语言。

然而,这些天来,开发人员避开了 COM/DCOM——尤其是基于 COM 的 ActiveX。(1994 年,我继续在 Microsoft 工作,并在这十年的剩余时间里使用 C++ 和 COM/DCOM。我得出的结论是,技术组合绝对是一条死胡同。我在这里参考了那段经历:Building Effective Enterprise分布式软件系统

与所有早期的 C++ 历史相比,Steve Job 的公司 NeXT 在 90 年代初期使用 Objective C 设计了一个插件架构,这是 NeXT Step 框架不可或缺的一部分。今天,它在苹果电脑和 iPhone 等重要平台上的 Mac OS X 中充满活力。

我提交了启用 Objective C 以更好地解决插件问题的方法。

Java 的拥护者将引用诸如垃圾收集之类的因素来解释为什么它比 C++ 更高效。我不会对此提出异议,但 Objective C 直到最近才使用 2.0 进行垃圾收集。在 iPhone 上垃圾收集仍然不可用。尽管如此,OS X 插件架构是完全可行的——这完全归功于 Objective C 风格的 OOP 与 C++ OOP 的优点。

有趣的是,Java 已被用于构建适用于任何平台或软件开发社区的最普遍的插件架构。Eclipse IDE 插件架构,现在几乎是传奇,就像这样的架构,几年前合并了 Equinox OSGi 模块管理层。十年来, J2EE 应用服务器一直支持 EJB 的插件架构。这些天来,所有值得注意的 J2EE 应用程序服务器都同样整合了 OSGi 来管理运行时可绑定模块。Spring 框架及其 Spring Bean 的运行时可绑定单元已经发展到超过了 J2EE——主要是在其用于管理 Spring Bean 的绑定的系统的强度上。

Java 社区仍在努力定义正式的模块管理标准,但即便如此,Java 平台支持的软件架构比任何其他编程平台都更普遍地包含插件功能。

尽管 Java 作为一门语言相对于 C# 存在弱点,并且 .NET 在其 .NET 汇编标准中已经具有更强大的模块实现,但 Java 在广泛使用的包含某种形式的插件的日常软件系统方面仍然领先数年建筑学。奇怪的是,Java 社区甚至没有意识到这是他们作为企业开发平台持续成功的基础。

我个人认为 C++ 脆弱的基类问题是它最致命的缺陷。

自从这个问题向 C++ 社区和 C++ 的创建者强调以来已经过去了 17 年,现在解决这个问题是否为时已晚?

0 投票
1 回答
3102 浏览

c# - IExtension:可扩展对象模式:它是如何工作的?

我在 C# 中使用 (IExtension, IExtensibleObject) 接口探索可扩展对象模式,我提供了一个非常简单的示例,将日期从本地转换为 UTC,反之亦然:

输出:

当地时间:2009 年 4 月 13 日上午 11:09:19
UTC:2009 年 4 月 13 日上午 5:39:19
当地时间:2009 年 4 月 13 日上午 11:09:19
按任意键继续。. .

所以它有效,问题是:

当程序调用 IExtensionCollection.Add 和 IExtensionCollection.Detach 方法时,.Net 框架如何调用“附加”和“分离”?填写我在这里遗漏的内部细节。

0 投票
1 回答
2280 浏览

c# - Visual Studio 可扩展性,以编程方式创建项目

我正在尝试以编程方式将测试项目添加到解决方案中。但是,当执行下面的代码时,我在“vhaSolution.GetProjectTemplate("TestProject.zip", "Csharp")" 行收到一个文件 IO 异常。该错误表明“任何已安装的软件包都不支持指定的语言”。有谁知道是什么原因造成的?

0 投票
2 回答
9856 浏览

visual-studio - Visual Studio 2008 插件/插件开发 - 入门

关于这个 stackoverflow 问题,我将如何创建自己的 Visual Studio 2008 插件?

我查看了 MSDN 上的 Visual Studio 开发人员中心,但信息量巨大。有很多项目类型,我什至不知道从哪里开始。

如果我想写一些满足以下要求的东西,我应该从哪里开始寻找:

  1. 在 Visual Studio 中像“服务”一样运行的插件,能够轮询 Visual Studio 以获取信息,并处理 Visual Studio 事件。
  2. 我想从 VS 访问的信息包括当前打开的项目、打开的项目以及其他基于解决方案/项目文件的信息。
  3. 我希望能够处理的事件是诸如解决方案/项目/单个文件的打开/关闭/编辑/创建/删除之类的。
  4. 我还希望能够在每个解决方案的基础上处理与 VS 的任何交互。所以,我想处理与文件的任何交互,甚至是代码编辑,但也只是其他交互,比如菜单,或者只是 IDE 本身。

除了这些,我还希望能够在某处存储数据。这通常在哪里进行?我可以将元数据添加到解决方案文件吗?或者,将此信息保存到数据库的小型本地实例是否有意义,该数据库以某种方式附加到解决方案..?

我只需要朝着正确的方向推动,这有可能吗?我应该关注 Visual Studio 开发人员中心的哪一部分?我应该检查哪些 API?

干杯!