标签: plugins

如何确定DLL是托管程序集还是本机(防止加载本机DLL)?

原标题:如何防止从.NET应用程序加载本机dll?

背景:

我的C#应用​​程序包括一个插件框架和通用插件加载器.

插件加载器枚举应用程序目录以识别插件dll(实质上它此时搜索*.dll).

在同一个应用程序目录中是一个本机(Windows,非.NET)dll,间接地,其中一个插件dll依赖于它.

插件加载器盲目地假设native.dll是.NET程序集dll,只是因为它只检查文件扩展名.当它尝试加载本机dll时,抛出异常:

"无法加载文件或程序集'native.dll'或其依赖项之一.模块应该包含程序集清单."

如果插件加载失败,我基本上创建了一个诊断报告,所以我试图避免让这个日志充满关于无法加载本机dll的消息(我甚至不想尝试).

问题:

是否有一些.NET API调用可用于确定二进制文件是否恰好是.NET程序集,以便我根本不尝试加载本机DLL?

也许从长远来看,我会将我的插件移动到一个子目录,但是现在,我只想要一个解决方案,不涉及在我的插件加载器中硬编码"native.dll"名称.

我想我正在寻找某种静态的Assembly.IsManaged()API调用,我忽略了......大概没有这样的API存在?

c# dll plugins assemblies native

25
推荐指数
4
解决办法
1万
查看次数

ViM:minibufexpl与bufexplorer插件

我正在考虑为vim安装缓冲区资源管理器.无论minibufexplbufexplorer有很好的评价.任何人都可以解释它们之间的差异或利弊.或者只是品味问题?谢谢!

vim explorer plugins

25
推荐指数
3
解决办法
1万
查看次数

Wordpress插件连接到REST API?

假设我在某个服务器上运行RESTful API,以及一个单独但相关的Wordpress站点.

我希望WP站点上有一些页面显示从REST服务器检索的WP页面上的数据(采用JSON格式),并允许用户查看和/或编辑WP页面上的数据.

例如,假设我有一个返回用户拥有的书籍列表的API作为REST起点.我想显示书籍列表,允许用户点击书籍链接并转到显示书籍详细信息的页面.

然后,如果用户进入"编辑模式",则允许他/她编辑数据并通过REST API将其POST/PUT返回服务器.

有没有WP插件可以让我创建显示和编辑这样的信息的页面?

我希望对于每种类型的实体,我都可以输入一些元数据来指示JSON中的内容,以及如何显示它以供查看或如何为其构建表单(如iPhorms所做的那样).

api rest wordpress plugins json

25
推荐指数
2
解决办法
3万
查看次数

System.Addin - 创建安全的ASP.NET MVC插件

最近我的重点是创建一个可以托管第三方MVC插件的ASP.NET MVC应用程序.理想情况下,这些插件的开发将遵循以下规则:

  1. 插件可以在标准MVC项目中开发,并且能够使用ASP.NET MVC框架的所有现有基础结构.
  2. 编译插件MVC项目并包含到主机MVC应用程序中的复杂性不应该很严重.
  3. 对MVC应用程序的正常开发流程的任何更改都将是最小值

经过一番研究后,我想出了以下几种方法来实现这一点,每种方法各有优缺点.

方法1 - 将MVC插件程序集加载到主MVC AppDomain中

工作流程

  • 在单独的MVC项目中开发插件.
  • 编译组件和它和任何依赖关系加载到经由所述主机应用程序PreApplicationStartMethodAttribute,MEF或主机项目中的基本组件参考(如果可能).
  • 将路由映射到插件控制器,以便将插件视为Area主机内的插件.
  • 将插件视图放入正确的区域文件夹中.需要更改布局文件,以便布局路径指向基于区域的位置,而不是应用程序的根(在开发MVC项目中就是这种情况)
  • 当插件的请求进入时,ASP.NET将使用现有区域功能将请求路由到正确的控制器并查看视图文件的正确位置.

好处

  1. 将无缝地工作,就好像控制器嵌入在主机MVC应用程序组件中一样.
  2. 在应用程序启动(PreApplicationStartMethodAttribute,项目引用)之前和应用程序启动之后(MEF),将程序集包含到主机App Domain中很简单

缺点

  1. 没有沙盒 - 控制器将具有与主机相同的信任级别.

结论

这是最简单的方法,但它也是最不安全的方法.它基本上消除了允许不受信任的开发人员创建插件的可能性,因为这些插件将具有与宿主应用程序相同的信任级别(这意味着如果宿主应用程序可以执行诸如System.IO.File.Delete插件之类的方法)

方法2 - 通过MAF在自己的AppDomain中运行的MVC插件程序集

这种方法旨在允许创建可以沙箱化为自己的MVC插件,AppDomains并由主机通过System.Addin库使用.

结构体

  1. 在主机中设置路由,以确定正在处理的URL是否针对插件.可能有这样的模式example.com/p/{plugin}/{controller}/{action}/{id}

  2. 具有上述模式的所有路由都映射到具有模块路由操作的主机控制器.该操作会查看任何给定的路由,并根据段确定处理请求的相应插件{plugin}.

  3. 插件视图是一个接收器/发送器对象,充当插件控制器的网关.它有一个名为AcceptRequest的方法,它RequestContext从主机接收a ,并返回一个ActionResult.

  4. 插件管道包含可以串行化RequestContextActionResult跨管道隔离边界传输的适配器.

执行流程

  1. 匹配插件的路由并调用插件路由控制器.

  2. 控制器将所需的插件加载到它自己的插件中AppDomain并调用AcceptRequest,通过RequestContext(通过管道序列化)

  3. AcceptRequest接收上下文并根据该请求确定要执行的适当控制器(使用自定义控制器工厂).

  4. 一旦控制器完成执行请求,它就会ActionResult向接收器对象返回一个接收器对象,然后将该接收器对象 …

asp.net asp.net-mvc plugins appdomain

25
推荐指数
1
解决办法
1792
查看次数

找不到自定义Gradle插件ID

我正在编写Gradle插件,但我无法使用该apply plugin:命令在使用该插件的Gradle脚本中工作.我正在使用Gradle 1.1.

我已经构建了插件,clean build并且我正试图通过平面回购添加到Gradle构建中.这似乎有效,但Gradle并没有意识到有一个带有ID的插件test-plugin.插件中的项目名称settings.gradletest-plugin,而属性文件META-INF/gradle-plugins也是test-plugin.properties.我不确定我还能在哪里指定插件ID.

gradle.build项目中的文件正在使用test-plugin:

repositories {
  flatDir name: 'libs', dirs: "../build/libs"
}

dependencies {
  compile 'test:test-plugin:0.1'
}

apply plugin: 'test-plugin'
Run Code Online (Sandbox Code Playgroud)

Gradle出错:

What went wrong:
A problem occurred evaluating root project 'tmp'.
Plugin with id 'test-plugin' not found.
Run Code Online (Sandbox Code Playgroud)

plugins build gradle

25
推荐指数
2
解决办法
4万
查看次数

spring-security-core插件的依赖性问题

我正在尝试将spring-security-core插件安装到我的项目中,但似乎无法在任何存储库中找到插件文件.

我将此行添加到BuildConfig文件的插件部分:

    compile ':spring-security-core:2.0-RC2'
Run Code Online (Sandbox Code Playgroud)

运行grails compile命令后,我遇到以下错误(缩短):

        ==== ebrRelease: tried

          http://repository.springsource.com/maven/bundles/release/org/springframework/security/spring-security-core/3.2.0.RC1/spring-security-core-3.2.0.RC1.pom

          -- artifact org.springframework.security#spring-security-core;3.2.0.RC1!spring-security-core.jar:

          http://repository.springsource.com/maven/bundles/release/org/springframework/security/spring-security-core/3.2.0.RC1/spring-security-core-3.2.0.RC1.jar

        ==== ebrExternal: tried

          http://repository.springsource.com/maven/bundles/external/org/springframework/security/spring-security-core/3.2.0.RC1/spring-security-core-3.2.0.RC1.pom

          -- artifact org.springframework.security#spring-security-core;3.2.0.RC1!spring-security-core.jar:

          http://repository.springsource.com/maven/bundles/external/org/springframework/security/spring-security-core/3.2.0.RC1/spring-security-core-3.2.0.RC1.jar

        ==== grailsCentral: tried

          http://grails.org/plugins/grails-spring-security-core/tags/RELEASE_3.2.0.RC1/spring-security-core-3.2.0.RC1.pom

          -- artifact org.springframework.security#spring-security-core;3.2.0.RC1!spring-security-core.jar:

          http://grails.org/plugins/grails-spring-security-core/tags/RELEASE_3.2.0.RC1/grails-spring-security-core-3.2.0.RC1.jar

        ==== mavenCentral: tried

          http://repo1.maven.org/maven2/org/springframework/security/spring-security-core/3.2.0.RC1/spring-security-core-3.2.0.RC1.pom

          -- artifact org.springframework.security#spring-security-core;3.2.0.RC1!spring-security-core.jar:

          http://repo1.maven.org/maven2/org/springframework/security/spring-security-core/3.2.0.RC1/spring-security-core-3.2.0.RC1.jar

                module not found: org.springframework.security#spring-security-web;3.2.0.RC1

        ==== grailsHome: tried

          C:\dev\springsource\grails-2.2.3\bin\../lib/org.springframework.security/spring-security-web/ivy-3.2.0.RC1.xml

          -- artifact org.springframework.security#spring-security-web;3.2.0.RC1!spring-security-web.jar:

          C:\dev\springsource\grails-2.2.3\bin\../lib/org.springframework.security/spring-security-web/jars/spring-security-web-3.2.0.RC1.jar

          C:\dev\springsource\grails-2.2.3\bin\../lib/org.springframework.security/spring-security-web/bundles/spring-security-web-3.2.0.RC1.jar

        ==== grailsHome: tried

          C:\dev\springsource\grails-2.2.3\bin\..\src\libs/spring-security-web-3.2.0.RC1.xml

          -- artifact org.springframework.security#spring-security-web;3.2.0.RC1!spring-security-web.jar:

          C:\dev\springsource\grails-2.2.3\bin\..\src\libs/spring-security-web-3.2.0.RC1.jar

        ==== grailsHome: tried

          C:\dev\springsource\grails-2.2.3\bin\..\dist/spring-security-web-3.2.0.RC1.xml

          -- artifact org.springframework.security#spring-security-web;3.2.0.RC1!spring-security-web.jar:

          C:\dev\springsource\grails-2.2.3\bin\..\dist/spring-security-web-3.2.0.RC1.jar

        ==== grailsHome: tried

          C:\dev\springsource\grails-2.2.3\bin\../plugins/spring-security-web-3.2.0.RC1.pom

          -- artifact org.springframework.security#spring-security-web;3.2.0.RC1!spring-security-web.jar:

          C:\dev\springsource\grails-2.2.3\bin\../plugins/spring-security-web-3.2.0.RC1.jar

        ==== ebrRelease: tried

          http://repository.springsource.com/maven/bundles/release/org/springframework/security/spring-security-web/3.2.0.RC1/spring-security-web-3.2.0.RC1.pom

          -- …
Run Code Online (Sandbox Code Playgroud)

grails plugins spring-security

25
推荐指数
1
解决办法
1万
查看次数

视觉工作室有一个很好的javascript插件吗?

我认为Visual Studio最大的失误是Javascript编辑器.我被告知使用Aptana作为我的javascript文件的编辑器,但我更愿意坚持使用visual studio.

我已经阅读过其他类似的插件帖子,但没有一个专注于Javascript.

VS2010可能会有一些改进,但它们是否符合Apatana标准?我已经对测试版进行了简要测试,但我并没有给我留下太深刻的印象.

那里有什么能让Javascript更接近c#开发吗?考虑到Javascript的广泛使用,我认为必须有一些东西.......我希望!:)

非常感谢...这是一直困扰着我的事情!

javascript plugins visual-studio

24
推荐指数
2
解决办法
2万
查看次数

在PHP应用程序中实现插件的设计模式

关于如何在PHP应用程序中实现插件有共识吗?

我已经研究了接近的观察者模式,它实际上只是一个通知系统,并且不允许代码直接扩展应用程序.我目前正在使用我提出的简单钩子系统:

public function registerHook($hookName, array $params = array())
{
    $this->hooks[] = $hookName;

    foreach ( $this->plugins as $pluginName => $hooks ) {
        if ( in_array($hookName, $hooks) ) {
            $plugin = new $pluginName($this, $this->view, $this->controller);

            $plugin->{$hookName}($params);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这很适合我的目的,但我很好奇是否有一个经过多次测试和验证的设计模式,我只是重新发明了轮子.

php oop plugins design-patterns observer-pattern

24
推荐指数
1
解决办法
5913
查看次数

用于热类重新加载的各种Java插件之间有什么区别?哪一个最直观?

我目前正在尝试在Java应用程序中实现热类重新加载,但是有很多插件可供选择,我找不到这些选项之间的良好比较.此外,插件的网站并不十分清楚具体功能是什么以及如何使用它们.

还有一个选项可以让一个自定义的热门类重新加载ClassLoader,但我觉得这类似于"重新发明轮子",如果已经有这么多的插件可以完成这项工作..其他人是否同意这一点?

我找到的Java插件我认为可以完成这项工作:

那么有谁碰巧知道插件之间的差异是什么?还有哪个插件最直观易用?

作为旁注:我实际想要做的是重新加载我的java应用程序的.jar文件依赖项.我有一些java代码经常自动重新编译,然后转换为.jar文件.它是我的java应用程序的依赖项,我的应用程序需要每次都使用此.jar文件的最新版本.

java plugins dynamic classloader hotswap

24
推荐指数
1
解决办法
4448
查看次数

如何覆盖sbt插件的依赖?

我写称为SBT插件SBT-JUMI它实现了SBT集成JUMI.现在sbt-jumi插件取决于当前的Jumi版本.

这是插件的build.sbt中的相关行:

libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.5.376"
Run Code Online (Sandbox Code Playgroud)

插件的用户会将此添加到他的project/plugins.sbt文件中:

addSbtPlugin("fi.jumi.sbt" % "sbt-jumi" % "0.1.0")
Run Code Online (Sandbox Code Playgroud)

现在让我们说Jumi 0.6.400已经发布,它向后兼容.sbt-jumi插件的用户如何配置它使用Jumi 0.6.400,而不必发布新版本的插件?

以下是在Maven中如何做到这一点.但是如何在sbt中做到这一点?

plugins dependency-management sbt

24
推荐指数
1
解决办法
8688
查看次数