标签: extensibility

什么加载项/工作台框架是Eclipse RCP的最佳.NET替代方案?

我正在寻找一个基于插件的应用程序框架,它与Eclipse插件框架相当,我的简单思想包括:

  1. 核心插件管理框架(Equinox/OSGI),它提供声明扩展端点,然后发现和加载为这些端点提供服务的插件的功能.(这比依赖注入不同,但不可否认的区别很微妙-配置是高度分散式,也有版本的关注,它可能涉及一个在线插件库,最重要的对我来说,它应该很容易为用户增加插件,无需了解底层架构/配置文件)
  2. 多层插件,提供基本工作台shell,包括并发支持,命令,首选项表,菜单,工具栏,键绑定等.

这只是RCP的表面,它本身就是你的应用程序的基础,你可以通过编写/组装更多的插件来构建它.


这是我在过去几天从互联网上收集的内容......

据我所知,.NET世界中没有任何东西可以远程接近Eclipse RCP for Java的健壮性和成熟度,但有几个竞争者可以很好地完成#1或#2.

(我还应该提到我还没有对WinForms vs WPF做出最终决定,所以我也试图了解任何候选框架中的UI耦合程度.我也想知道平台耦合和源代码许可)

我必须说开源的东西通常记录较少但更容易理解,而MS的东西通常有更多的文档,但是不太容易理解,因此对于许多MS技术,我不知道他们实际上做了什么. ,在实际意义上.

这些是我找到的库:

SharpDevelop的

我看到的第一件事是SharpDevelop,它以基本的方式同时执行#1和#2(对SharpDevelop没有任何侮辱,这是令人钦佩的 - 我的意思是比Eclipse RCP 更基本).但是,SharpDevelop不仅仅是一个框架,它还有一些基本的假设和局限(即与WinForms有些结合).仍有一些关于CodeProject的文章解释了如何将它作为应用程序的基础.

System.Addins

似乎System.Addins旨在提供一个强大的加载项加载框架,其中包含一些复杂的选项,用于加载具有不同信任级别的程序集,甚至可以运行进程外的程序集.它似乎主要是基于代码的,而且代码很重,有许多程序集用于隔离版本问题.使用Guidance Automation生成大量代码.

到目前为止,我还没有发现很多System.AddIns文章,这些文章说明了它如何用于构建像Eclipse RCP这样的东西,很多人似乎都在为它的复杂性绞尽脑汁.

Mono.Addins

似乎Mono.Addins受System.Addins,SharpDevelop和MonoDevelop的影响.它似乎提供了System.Addins的基础知识,插件加载的选项较少,但更简单,基于属性的注册,XML清单和在线插件存储库的基础结构.

它有一个非常好的常见问题解答和文档,以及一组相当强大的例子,真正有助于描绘如何开发类似SharpDevelop或Eclipse的架构.这些示例使用GTK作为UI,但框架本身并未与GTK耦合.所以它看起来很好地做#1(加载项加载)并指向#2(工作台框架).似乎Mono.Addins是从MonoDevelop派生的,但我还没有看到MonoDevelop是否提供了一个很好的核心工作台框架.

托管可扩展性框架

这是每个人现在都在谈论的内容,而且它正在慢慢变得清晰起来,但即使在阅读SO上的几个帖子后,我仍然非常模糊.官方的说法是它可以与System.Addins"并存".但是,它没有引用它,它似乎重现了它的一些功能.在我看来,它是System.Addins的一个更简单,更易于访问的替代方案.

它看起来更像是Mono.Addins,因为它提供了基于属性的布线.它提供了可以基于属性或基于目录的"目录".它似乎不提供任何XML或基于清单的连线.到目前为止,我还没有找到很多文档,并且这些示例似乎有点"神奇",更像是基于属性的DI,尽管有人澄清MEF不是DI容器.

它的许可证刚刚开放,但确实引用了WindowsBase - 不确定这是否意味着它与Windows相连.

雅典卫城

我不确定这是什么.它是MEF,还是还在发生什么?

复合应用程序块

WPF和Winforms Composite Application块似乎提供了更多的工作台框架.我对这些经验很少,但他们似乎依赖于指导自动化显然与UI层相结合.有一些将MEF与这些应用程序块组合在一起的例子.


我已尽力在这里回答我自己的问题,但我真的只是表面上看,而且我没有任何这些框架的经验.希望你们中的一些人可以添加更多关于你们经历过的框架的细节.如果我们最终得到某种比较矩阵会很棒.

.net eclipse plugins extensibility add-in

6
推荐指数
1
解决办法
2568
查看次数

如何使用MPF创建继承自c#的自定义项目?

使用Visual Studio的托管包框架,如何从C#继承,以便我可以拥有C#属性页和C#项目项?我已经尝试制作一个风味项目,但它在制作我们自己的自定义节点和自定义文件属性方面受到限制.但是,在使用MPF时,我似乎无法获得随着调味项目提供的那些C#属性.

谢谢

c# vsx extensibility mpf subtype

6
推荐指数
1
解决办法
639
查看次数

如何在C#中开发基于动态插件的功能

我一直在寻找为我的应用程序提供插件支持的不同方法.理想情况下,我将创建一个核心功能,并基于不同的客户开发不同的插件/插件,如导入,导出数据等......有哪些方法可以通过插件架构使C#应用程序可扩展?

让我们举一个例子.如果我们有一个程序包含一个主菜单(File,Edit,View等)以及一个TreeView,它显示按制造商分组的不同品牌的汽车(福特,GM,目前).右键单击汽车会显示一个上下文菜单,唯一的选项是"删除汽车".

你怎么能开发应用程序以便可以部署插件,这样你就可以让一个客户在TreeView中看到一个新品牌,让我们说本田,并且还可以扩展汽车上下文菜单,以便他们现在可以"画一辆车" "?

在Eclipse/RCP开发中,扩展点和插件可以轻松处理.C#如何处理它?我一直在研究开发自己的插件架构并阅读MEF.

c# plugins extensibility menu dynamic

6
推荐指数
1
解决办法
2805
查看次数

在Visual Studio扩展中,获取调试器停止的函数的行范围

我有一个Visual Studio扩展,它挂钩到调试事件.当调试器在一行代码处停止时,我的IDebugEventCallback2回调被调用,我可以找到调试器已经停止的文件名和行号IDebugThread2::EnumFrameInfo.

我想知道当前函数跨越的源代码行的范围.

我希望可以从调试器接口获取我需要的信息 - 调试器必须知道函数的行范围.如果那是不可能的,我会接受任何其他方法.在理想的世界中,解决方案可以在没有项目系统的情况下工作 - 包括我自己在内的许多人使用Visual Studio作为独立的调试器而不使用项目系统.(另外,我不能依赖Roslyn - 它需要在现有版本的Visual Studio中工作.)

编辑:FileCodeModel只要文件是项目的一部分,Carlos的使用方法效果很好.我仍然想知道是否有一种不需要项目系统的方法.

extensibility visual-studio vs-extensibility vsix visual-studio-extensions

6
推荐指数
1
解决办法
396
查看次数

Visual Studio可扩展性:将现有文件夹添加到项目中

我正在尝试使用Visual Studio 2008的可扩展性来编写一个插件,该插件将在解析接口后创建一个包含各种消息的项目文件夹.但是,我在创建/添加文件夹的步骤中遇到了麻烦.我试过用了

ProjectItem folder = 
item.ProjectItem.Collection.AddFolder(newDirectoryName, string.Empty); 
Run Code Online (Sandbox Code Playgroud)

(item是我的目标文件,我正在创建一个具有相同名称但附加了"Messages"的文件夹)但是当文件夹已经存在时它会窒息(没什么大惊喜).

我尝试删除它,如果它已经存在,例如:

DirectoryInfo dirInfo = new DirectoryInfo(newDirectoryParent + 
newDirectoryName); 
if (dirInfo.Exists) 
{
    dirInfo.Delete(true);
}

ProjectItem folder = 
item.ProjectItem.Collection.AddFolder(newDirectoryName, string.Empty); 
Run Code Online (Sandbox Code Playgroud)

我可以看到该文件夹​​在调试时被删除,但它似乎仍然认为该文件夹仍然存在并且已经存在文件夹已经存在异常.

有任何想法吗???

谢谢.

AK

....也许答案是在删除后以编程方式刷新项目?怎么可能这样做?

vsx extensibility add-in visual-studio

5
推荐指数
1
解决办法
4308
查看次数

Boo的元编程和可扩展性功能指南?

我有兴趣了解Boo更强大的功能,如语法宏,解析器支持(Ometa?),编译器管道等.我的印象是这些领域一直在变化,有些记录不足.除了研究源代码之外,还有什么好的资源可以学习这些东西吗?

extensibility boo metaprogramming

5
推荐指数
1
解决办法
752
查看次数

我应该在Visual Studio加载项中附加解决方案或项目事件的位置?

任何人都可以提出补充解决方案或项目活动,如ProjectAdded,到Visual Studio插件的最佳地点?

如果我这样做,当外接连接那么就没有加载的解决方案,所以我怎么能知道当一个解决方案已经被加载?

例如,如果我编写一个事件来处理正在添加的项目项目,我应该在哪里附加它?本次活动将通过该项目被解雇,而这又通过该解决方案,所以我不能当外接连接,因为没有解决外接所连接时连接的事件.

在另一方面,如果我在执行exec()事件中添加他们,那么我需要做的检查,如该事件是否已经被连接,我敢肯定,必须有连接事件和Exec之间建立更合适的方法有时()事件.

events extensibility add-in visual-studio

5
推荐指数
1
解决办法
1036
查看次数

一个或多个事实表?

我正在尝试建立一个数据集市.

我有很多维度和一些措施 - 事实.每项措施都与业务方面的所有维度相关联.有一种标准方法,将有一个包含所有措施的重要事实表.

但我有一个想法:如果每个度量都有单独的事实表,该怎么办?它将如何处理数据库性能,解决方案扩展性等?

编辑:::在非常复杂的企业环境中,基于olap立方体的巨大解决方案.因此,首先需要的是易于扩展和维护,然后是性能

extensibility database-design data-warehouse fact-table business-intelligence

5
推荐指数
1
解决办法
7497
查看次数

将MEF与C#一起使用,如何从插件中调用主机上的方法?

我正在尝试使用托管扩展框架(MEF)向我的C#应用​​程序添加插件可扩展性框架到目前为止它还可以; 我有我的主/主机应用程序从定义的文件夹加载插件,并可以从主应用程序调用他们的方法等.宿主应用程序和插件都引用了一个单独的dll程序集,其中包含所有项目通用的接口.

这工作正常,我可以从主应用程序调用/与插件交互.不过,我也希望能够与宿主应用程序进行交互,从插件中,但似乎无法了解如何完成此操作.

我希望能够从我的插件中获取/设置/执行主应用程序中的导出属性和方法.目前我只能从主应用程序"说出"插件,而不是相反.

我的代码到目前为止:

接口DLL

namespace MefContracts
{
    [InheritedExport]
    public interface IPlugin
    {
        String DoWork();
    }

    public class Class1
    {
        public IPlugin plugin { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

主要/主机应用程序

namespace MyMEF
{
    class clsMEF
    {
        private CompositionContainer _container;

        [Import(typeof(MefContracts.IPlugin))]
        public MefContracts.IPlugin plugin;

        public clsMEF()
        {
            Compose();
        }

        void Compose()
        {
            var catalog = new AggregateCatalog();
            catalog.Catalogs.Add(new DirectoryCatalog("..\\..\\Extensions"));
            _container = new CompositionContainer(catalog);
            try
            {
                this._container.ComposeParts(this);
            }
            catch (CompositionException compositionException)
            {
                Console.WriteLine(compositionException.ToString());
            }
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c# plugins extensibility mef

5
推荐指数
1
解决办法
6284
查看次数

如何创建可扩展的电子应用程序?

AtomVisual Studio Code可能是迄今为止最大的 Electron 应用程序,它们都具有很强的可扩展性,还有其他较小的示例,例如N1。可扩展我的意思是,它们支持插件。

问题是:我以为我会在 Google 上找到有关如何使 Electron 应用程序可扩展的信息,或者在那些很酷的“很棒”列表中找到一些信息,但我什么也没找到。此外,深入研究这些应用程序的源代码需要一段时间。

我在找什么(或):

  • 我不知道的内置功能
  • electron-extensible(假名)这样的图书馆
  • 指南

那么,如何使 Electron 应用程序可扩展?

javascript extensibility node.js electron

5
推荐指数
1
解决办法
617
查看次数