如何开始为我的 .NET 应用程序设计和实现脚本接口?

2024-03-14

如何开始为我的 .NET 应用程序设计和实现脚本接口?

VSTA http://en.wikipedia.org/wiki/Visual_Studio_Tools_for_Applications(.NET 相当于VBA http://en.wikipedia.org/wiki/Visual_Basic_for_Applications for COM http://en.wikipedia.org/wiki/Component_Object_Model),但据我了解,我必须为每次安装应用程序支付许可费。它是一个开源的 应用程序,因此这将不起作用。

还有例如解释器的嵌入(IronPython?),但我不明白这如何允许将“对象模型”(见下文)暴露给外部(或内部)脚本。

子问题:

  • .NET 中的脚本接口故事是什么?在 .NET 中执行此操作是否很简单?
  • 例如。我的应用程序中的某些 .NET 对象及其包含的对象是否可以声明为可在运行时从外部访问?
  • How can external脚本访问我的应用程序(通过对象模型)?

背景:

我曾经为 Macintosh 应用程序设计并实现了一个相当复杂的脚本接口,用于采集和分析来自质谱仪 http://en.wikipedia.org/wiki/Mass_spectrometry#Time-of-flight(苹果系统,System 7 http://en.wikipedia.org/wiki/System_7)以及后来的 Windows 应用程序的 COM 接口。

两者都是用“对象模型”和类(可以具有属性)设计的。这些都是超载的词语,但是 在脚本接口上下文对象模型中,本质上是特定类的对象的包含层次结构。类具有属性、所包含对象的列表,并且不仅是数据,还可以具有动词(操作/方法)。例如。在 Macintosh 情况下,定义的应用程序对象可以包含一个采集对象,该对象具有仪器中使用的电压属性和fireLater动词 - 全部如外部脚本所示。

请注意,在这两种情况下,用于实现应用程序的编程语言中的类/对象与脚本对象模型无关。对于 Macintosh 来说,用于实现脚本接口的机制是由 Apple 定义的。 Apple还定义了一些关于如何设计对象模型的标准。例如,类中某些公共属性的标准化名称。

或者像 Microsoft Office 应用程序中公开的 COM 接口一样,其中应用程序对象可用于添加到其文档列表(具有创建文档的 GUI 表示形式的副作用)。

外部脚本可以在容器中创建新对象,并在任何给定时间浏览层次结构的内容。在 Macintosh 中,案例脚本可以用以下语言编写:苹果脚本 http://en.wikipedia.org/wiki/AppleScript or Frontier http://en.wikipedia.org/wiki/UserLand_Software#Frontier.

在 Macintosh 上,脚本接口的实现非常复杂。 支持它在地铁工厂 http://en.wikipedia.org/wiki/Metrowerks' C++ 类库(我现在想不起这个名字了)让它变得简单多了。


看一眼电源外壳 http://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx.

它允许您编写可编写脚本的简单 Cmdlet。它还支持分层容器(默认情况下您有文件系统、注册表、证书存储等)。

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

如何开始为我的 .NET 应用程序设计和实现脚本接口? 的相关文章

  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • Global.asax PostAuthenticateRequest 事件绑定是如何发生的?

    我怎样才能使用发布验证请求Global asax 事件 我正在跟进本教程 http www asp net security tutorials forms authentication configuration and advanced
  • idleTimeout 和 ShutdownTimeout 之间的区别

    我正在尝试放宽网站的会话过期策略 以便用户可以指定会话超时间隔 我需要弄清楚应该指定哪些网站相关设置 以免过多限制用户 例如 可能需要 1 天的间隔 我将使用门票来实现这一点 现在 我知道我可以在网站的 web config 文件中指定id
  • C# 如何使用 CallNtPowerInformation 和 Interop 来获取 SYSTEM_POWER_INFORMATION

    我正在尝试编写一个小程序 该程序作为服务运行并监视用户是否处于活动状态 如果用户空闲 没有鼠标 键盘 一个小时 则某些进程将被终止 如果用户使用 user32 dll 中的 LASTINPUTINFO 运行它 它就可以工作 但它不能作为服务
  • 策略模式还是命令模式?

    假设我有一个金融交易列表 我需要针对这些交易执行一系列验证规则 一个例子是我有一笔购买产品的交易 但是首先我需要验证交易中的帐户是否有足够的可用资金 产品没有售完等 由于这些规则 交易将是标记为拒绝 并应指定错误代码 当然 我正在考虑用一个
  • 生成逗号分隔值

    假设我有一个字符串集合 foo bar xyz 我想从列表中生成一个逗号分隔的值 如下所示 foo bar xyz 请注意末尾缺少 我知道有多种方法可以生成此内容 使用 for 循环和 string Format 或 StringBuild
  • WCF WebHttp 混合身份验证(基本和匿名)

    所有这些都与 WebHttp 绑定有关 托管在自定义服务主机中 IIS 目前不是一个选项 我已经实现了自定义 UserNamePasswordValidator 和自定义 IAuthorizationPolicy 当我将端点的绑定配置为使用
  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • 通过 SOAP 的 Gmt php 或 UTC C# 等效项

    is C DateTime UtcNow和 PHPdate c 是等价的 我怀疑 因为当我肥皂时 我得到了 C
  • 如何在 Windows CE 中使用 VB.Net 访问条码扫描仪

    最近我被要求开发一个应用程序摩托罗拉 MK4000 http www motorola com Business US EN Business Product and Services Micro Kiosks Micro Kiosks M
  • 我需要安装什么才能获取 Microsoft.TeamFoundation.WorkItemTracking.Client.dll?

    我只需要安装VS2010 SDK http www microsoft com downloads en details aspx FamilyID 47305cf4 2bea 43c0 91cd 1b853602dcc5 是否有 TFS2
  • Mono 在实际应用中的应用有多广泛?

    跟进评论问题here https stackoverflow com questions 3736101 what applications had better be developed in c over c in todays bus
  • 使用 IAsyncEnumerable 对另一个服务或 API 进行异步调用并批量返回响应

    我正在尝试创建一个 API 一旦准备好就返回结果 目标是 准备就绪后立即生成结果的 API 端点 消费应用程序调用端点并在数据准备好后立即处理数据 我的 API 调用另一个服务 HttpGet Route stream public asy
  • 忽略挂起的更改中的某些文件

    这是我的问题 我已经更改了解决方案中的某些文件 假设是 Web config 并且永远不想签入 因为这些更改仅涉及我的计算机 有没有办法在 TFS 中忽略某个文件中的更改并将其从挂起的更改窗口中删除 当然 我可以在每次签入时跳过这个文件 但
  • MVC2 中隐藏字段的替代方案

    我有一个 viewModel 其中包含一个在传递给部分视图之前填充的字符串 我需要能够在发布表单时取回数据 目前我已经创建了一个隐藏字段并将数据绑定到它 然后 当回发时 我可以从表单集合中获取数据 这并不完全是我想要的 我希望数据完全隐藏在
  • 如何在没有 Startup 类的情况下以编程方式启动 .NET 6 最小 API

    我正在尝试对我们的提供商项目实施 PactNet 合同测试 然而问题是 我们使用的是 Minimal API 因此我们没有将 Startup cs 和 Program cs 类全部整合到一个 Program cs 中 这提出了一个问题 因为
  • Wix - 自定义安装目录

    我使用的是 Wix 3 x 用户应该能够选择目标目录 我的Setup wxs目前是这样的 http pastebin com uH1EjbDQ http pastebin com uH1EjbDQ 询问用户自定义目标目录的最简单方法是什么
  • Python tkinter.filedialog Askfolder 干扰 clr

    我主要在 Spyder 中工作 构建需要弹出文件夹或文件浏览窗口的脚本 下面的代码在spyder中完美运行 在 Pycharm 中 askopenfilename工作良好 同时askdirectory什么都不做 卡住了 但是 如果在调试模式
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行

随机推荐