参考文章Creating a Plugin 和Publish Notification Hook Plugins
添加Publish Notification Hook Plugins
Step 1 Create a new .NET Class Library project
Step2 Add a reference to the WindowsLive.Writer.Api assembly
(located in C:/Program Files/Windows Live/Writer)
右键单击解决方案下的引用,选择添加引用:
在弹出的添加引用对话框中选择“浏览”标签,找到Live Writer的安装目录,如C:/Program Files/Windows Live/Writer(这个只是参考目录,你懂的)
Step3 Create a new class … derived from PublishNotificationHook
需要在文件头加上using WindowsLive.Writer.Api;
Step4 Apply the WriterPluginAttribute attribute
在类的前面添加WriterPluginAttribute属性
[WriterPluginAttribute("e4f548e4-4806-4d38-af3d-5bfe6d4d8d22 ", "LWShare01 ")]
你需要将上面红色部分替换成你插件的GUID,蓝色部分替换成插件名。
Step4 override…OnPrePublish or OnPostPublish Method
这里,可能需要用到诸如文章的标题,发布后的URL,需要用到OnPostPublish的参数publishContext。
其中,文章的标题是publishingContext.PostInfo.Title,文章发布后的URL是publishingContext.PostInfo.Permalink。
public override void OnPostPublish( IWin32Window dialogOwner, IProperties properties, IPublishingContext publishingContext, bool publish)
{
//分享代码
}
Step5 copies your plugin to the Writer plugins directory
我按照帮助文档操作居然无法编译(可能是设置问题),最后,我想这步的目的应该主要是将生成的dll拷贝至Live Writer的Plugin目录中,因此,我修改了项目的设置,将项目的生成路径改到了Live Writer的Plugin目录中,调试、运行都没有什么问题。
其他问题
.Net基础知识
由于本人对.Net不是很熟(从来没有正式用过,连写个Hello World都没有),因此,本节的内容很简单,对.Net熟悉的童鞋可以略过
1) C#的MessageBox
测试时,可以用MessageBox来调试,这需要添加位于“.Net”标签页下的system.windows.forms引用和using System.Windows.Forms;最后,MessageBox.show即可。
2) 如何添加Attribute
我在查看帮助文档,“开发工具和语言/Visual Studio文档/Visual C#/C#编程指南”时,发现有2个属性节点(MSDN2005,MSDN2008中的Attribute则位于“C#编程指南”的“特性”下),原来,一个属性是C#的属性(get和set),另外一个才是参考文档中的Attribute。
根据帮助文档,要添加类似InsertableContentSourceAttribute 的 attribute ,格式如下:
[特姓名(特性参数)]
3)如何查看dll的GUID
右键单击解决方案,选择属性,在属性对话框中,选择“应用程序”标签页,在“应用程序”标签页中,找到“程序集信息”按钮,单击后出现的对话框中即可以看到GUID。
4) 设置生成路径
右键单击解决方案,选择“属性”菜单项,按下图所示设置:
5) 设置外部启动程序
如果你的应用程序是dll,则需要一个exe程序启动它,设置如下图所示(解决方案的属性):
ContentSource相关知识
折腾了好久,大概弄明白(可能是错误的理解^_^ )了一点:
1)ContentSource插件主要是针对插入,Insert dialog box则会在“插入”菜单栏添加一个菜单,菜单名取自InsertableContentSourceAttribute的参数
2)URL (Blog This or Paste)则是在粘贴网址时会触发CreateContentFromUrl 方法,属性的参数(只有一个参数)则是用来匹配的,正则表达式来的,也就是说,只有匹配了的网址,才会触发CreateContentFromUrl 方法。