背景:
我的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存在?
我正在考虑为vim安装缓冲区资源管理器.无论minibufexpl和bufexplorer有很好的评价.任何人都可以解释它们之间的差异或利弊.或者只是品味问题?谢谢!
假设我在某个服务器上运行RESTful API,以及一个单独但相关的Wordpress站点.
我希望WP站点上有一些页面显示从REST服务器检索的WP页面上的数据(采用JSON格式),并允许用户查看和/或编辑WP页面上的数据.
例如,假设我有一个返回用户拥有的书籍列表的API作为REST起点.我想显示书籍列表,允许用户点击书籍链接并转到显示书籍详细信息的页面.
然后,如果用户进入"编辑模式",则允许他/她编辑数据并通过REST API将其POST/PUT返回服务器.
有没有WP插件可以让我创建显示和编辑这样的信息的页面?
我希望对于每种类型的实体,我都可以输入一些元数据来指示JSON中的内容,以及如何显示它以供查看或如何为其构建表单(如iPhorms所做的那样).
最近我的重点是创建一个可以托管第三方MVC插件的ASP.NET MVC应用程序.理想情况下,这些插件的开发将遵循以下规则:
经过一番研究后,我想出了以下几种方法来实现这一点,每种方法各有优缺点.
工作流程
PreApplicationStartMethodAttribute,MEF或主机项目中的基本组件参考(如果可能).Area主机内的插件.好处
PreApplicationStartMethodAttribute,项目引用)之前和应用程序启动之后(MEF),将程序集包含到主机App Domain中很简单缺点
结论
这是最简单的方法,但它也是最不安全的方法.它基本上消除了允许不受信任的开发人员创建插件的可能性,因为这些插件将具有与宿主应用程序相同的信任级别(这意味着如果宿主应用程序可以执行诸如System.IO.File.Delete插件之类的方法)
这种方法旨在允许创建可以沙箱化为自己的MVC插件,AppDomains并由主机通过System.Addin库使用.
结构体
在主机中设置路由,以确定正在处理的URL是否针对插件.可能有这样的模式example.com/p/{plugin}/{controller}/{action}/{id}
具有上述模式的所有路由都映射到具有模块路由操作的主机控制器.该操作会查看任何给定的路由,并根据段确定处理请求的相应插件{plugin}.
插件视图是一个接收器/发送器对象,充当插件控制器的网关.它有一个名为AcceptRequest的方法,它RequestContext从主机接收a ,并返回一个ActionResult.
插件管道包含可以串行化RequestContext并ActionResult跨管道隔离边界传输的适配器.
执行流程
匹配插件的路由并调用插件路由控制器.
控制器将所需的插件加载到它自己的插件中AppDomain并调用AcceptRequest,通过RequestContext(通过管道序列化)
AcceptRequest接收上下文并根据该请求确定要执行的适当控制器(使用自定义控制器工厂).
一旦控制器完成执行请求,它就会ActionResult向接收器对象返回一个接收器对象,然后将该接收器对象 …
我正在编写Gradle插件,但我无法使用该apply plugin:命令在使用该插件的Gradle脚本中工作.我正在使用Gradle 1.1.
我已经构建了插件,clean build并且我正试图通过平面回购添加到Gradle构建中.这似乎有效,但Gradle并没有意识到有一个带有ID的插件test-plugin.插件中的项目名称settings.gradle是test-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) 我正在尝试将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) 我认为Visual Studio最大的失误是Javascript编辑器.我被告知使用Aptana作为我的javascript文件的编辑器,但我更愿意坚持使用visual studio.
我已经阅读过其他类似的插件帖子,但没有一个专注于Javascript.
VS2010可能会有一些改进,但它们是否符合Apatana标准?我已经对测试版进行了简要测试,但我并没有给我留下太深刻的印象.
那里有什么能让Javascript更接近c#开发吗?考虑到Javascript的广泛使用,我认为必须有一些东西.......我希望!:)
非常感谢...这是一直困扰着我的事情!
关于如何在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)
这很适合我的目的,但我很好奇是否有一个经过多次测试和验证的设计模式,我只是重新发明了轮子.
我目前正在尝试在Java应用程序中实现热类重新加载,但是有很多插件可供选择,我找不到这些选项之间的良好比较.此外,插件的网站并不十分清楚具体功能是什么以及如何使用它们.
还有一个选项可以让一个自定义的热门类重新加载ClassLoader,但我觉得这类似于"重新发明轮子",如果已经有这么多的插件可以完成这项工作..其他人是否同意这一点?
我找到的Java插件我认为可以完成这项工作:
那么有谁碰巧知道插件之间的差异是什么?还有哪个插件最直观易用?
作为旁注:我实际想要做的是重新加载我的java应用程序的.jar文件依赖项.我有一些java代码经常自动重新编译,然后转换为.jar文件.它是我的java应用程序的依赖项,我的应用程序需要每次都使用此.jar文件的最新版本.
我写称为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中做到这一点?