SharpDevelop学习笔记(6)—— AddIn构建指南

来源:互联网 发布:nginx 判断url参数 编辑:程序博客网 时间:2024/03/29 22:53
 
1关于AddIn构建指南
本文也许可以作为遵照构建计划编写develop但并不讲述如何去扩展SharpDevelop
2文件结构
每个addin应该在src/文件夹里的某处有一个自己的目录.它应该提供一个用于建立或清除项目的项目计划文件。
您的AddIn拥有自己的目录,并且根文件夹包含一个解答文件。在根文件夹里面,可以有二个次目录:项目和测试。项目Addin本身,‘测试是一套给AddIn的单位测试 (单位测试源文件和项目文件)
项目目录包含以下次目录和文件:
名字
内容
描述
项目名.csproj
MSBuild文件
addin的项目文件
项目名.addin
AddIn定义文件
ContainsXML树的xml代码.
应该用 'CopyToOutputDirectory'.
Src/
源代码文件
这是给你的add-in的源代码
Resources/
任何类型的文件
这是编写进add-in集合的所有源
Doc/
文件 (不用*.doc格式; 如果需要的话要用.txt或者.html)
这里可能会把文件放在add-in
RequiredLibraries/
(必需的目录)
*.dll文件
Add-in在二进制下运用这些目录
3设定项目
您可以用SharpDevelop AddIn”模板创建一个测试addin项目。注意,它不会编写到盒子外面,只以文件的形式给您一个目录结构以让您的启动稍快一些.
做这件事的第一步是要设立项目属性.
3.1项目属性
SharpDevelop/AddIns/AddIns里面设置到达次文件夹的项目输出路径。如果您的AddIn没有跟SharpDevelop分布在一起,那就把它放在位于SharpDevelop/AddIns/3rdparty之中的次文件夹.
模板没有为你做的事情会在SharpDevelop的参考里面涉及。您会需要一个有关ICSharpCode.Core.dllICSharpCode.SharpDevelop.dll.的参考说明.在这两个参考上设置拷贝参考到输出路径是错误的.
3.2  .addin文件
3.2 .addin文件.addin文件是您addin里最重要的文件。您能指定您的add-in将在 SharpDevelop的什么部分进行扩展.当首次使用它的时候您的当前addin目录便被加载了.
当您使用模板创建新的一个新的AddIn时,以下文件便已经生成了:
<AddIn name = "MyAddInName"
author = "username"
copyright = "GNU General Public License"
url = ""
description = "TODO: Put description here">
<Runtime>
<Import assembly = "MyAddInName.dll"/>
</Runtime>
<Path name = "/SharpDevelop/Workbench/Pads">
<Pad id = "MyAddInNamePad"
category = "Main"
title = "MyAddInNamePad"
icon = "PadIcons.NUnitTest"
shortcut = "Control|Alt|T"
class = "MyAddInName.TestPad"/>
</Path>
</AddIn>
这是在展示.addin文件如何运行:<Runtime> 部分描述通过Addin使用了什么集合. 随后是许多的扩展路径. 这样,您就能向AddInTree里插入元素了。MyAddInName.TestPad是定义在MyAddInName.dll里的一个类. 只有在创建类的实例的时候那个集合才会被加载.这不是在启动SharpDevelop的时候而是在优先展示pad content(衬垫内容)的时候.因此在启动SharpDevelop的时候背景里的衬垫是不会引起集合的加载的.
有关可能存在的扩展路径以及AddinTree详细运作,请阅读本文在文件夹中的”AddInTree”.
addin文件没有编写入集合,而是复制到了输出目录.
(BuildAction=None CopyToOuputDirectory=Always; 模板应该已经为您设置了这些属性)
4资源的使用
4.1XmlForms和其他文件
模板通过利用XmlForms显示衬垫内容展示了源文件的用途。您的AddIn不需要使用XmlForms,这个模板只是展示了源文件(XmlForms)的使用.
您可以把任何文件放入源目录里(参见在2.1章节里的表格).设置‘EmbeddedResource’的创建类型,还有把文件编写进集合里。然后你可以用GetExecutingAssembly().GetManifestResourceStream("MyAddInName.Resources.MyUserControl.xfrm")访问文件.
不同于SharpDevelop 1.x编写人员会在项目设置中根据root namespace (根命名空间)和保存在项目里的文件夹预先设计出源文件名. 所以,文件名MyUserControl.xfrm会扩展成MyAddInName.Resources.MyUserControl.xfrm.
GetManifestResourceStream会返回一个stream,所以在你完成的时候不要忘记关掉它.
4.2 Bitmaps(位图)
有两种类型的位图:
1.    服务于您的addin的位图
只要把位图放进目录里并设置‘EmbedAsResource’的动作。然后您可以用
Assembly.GetExecutingAssembly().GetManifestResourceStream("RootNamespace.Resources.MyImage.png")
去获取一个源文件的流.
您可以从那个流里创建并设置一个位图.
:我能使用一个源文件(*.resources/*.resx)?这样岂不更简单?
:可以用但不会把事情变的更简单.因为修改位图更困难的。我知道多数位图从被创建开始是不会在改动的. 这样做的主要原因是有可能引起#Develop的更新。而在下一个.NET版本上.NET 版本和源文件将会被破坏.
这将给#Develop转换到新的框架带来更多的困难。我推荐所有人不要把字符串之外的任何东西保存在源文件里.二进制数据是100%的办不到的。
2.服务于ResourceService的位图
位图在用于ResourceService之前必须注册登记.ResourceService用于衬垫和菜单项目的图标上。
当前,没有容易的方法来让ResourceService明白您的Addin提供的图标。增加新位图的最简单方法就是进入SharpDevelopResources/BitmapResources目录并把您的位图放在次目录里.然后您就能编辑text file(文本文件)
SharpDevelopResources/BitmapResources/BitmapResources.res而且为您的位图包括进一条排列(靠近同一个次目录下的其他位图的排列). 调用BitmapResources/build.bat同时将把源编写插入进起始的项目(SharpDevelop.exe)。应用SharpDevelop/src/build.bat编写SharpDevelop/来结束使用新的源文件。
当您想分开分布您的源的时候还有另外一个可能的办法::为您的项目做一个像SharpDevelopResources/BitmapResources的单独目录然后用一个类似的构造文件把位图构造进一个BitmapResources.resources二进制文件里.不要直接编辑BitmapResources.resources文件,一般总是使用构造的原本(参见前面部分的问题)! 然后把BitmapResources.resources文件添加到您的addin项目同时把“Copy to output directory”设置成“Always”. 为了能在ResourceService里注册文件,还要把这个排列添加到*.addin文件里:
<BitmapResources file="Resources/MyAddinBitmapResources.resources" />
4.3字符串(定位)
你可以使用SharpDevelop's resource service(源服务)去定位字符串.
使用StringParser.Parse(“${res:FullResourceName}”)来请求定位字符串
字符串的源名字应该是这样的格式“YourAddInName.ResourceName”.
在所有字符串里的XMLaddin定义文件和在XmlForms里的访问“${...}”的源会被自动地解决,对于MessageService您不需要在那里调用StringParser.Parse
如何供应您的字符串:
把一个.resources文件添加到addin里的“Resources”目录(SharpDevelop”Misc”部分有一个模板)。您应该命名它“StringResources.resources”.
在这个文件里,当在language-specific文件里没有找到一个resource entry(源入口)的时候,你要输入给fall back一个函数值.通常, 会把US-English字符串放置在那个文件里。
在源目录里放置能翻译的字符串,“StringResources.de.resources”(“de”是语言代码)。这些能翻译的串将会自动地编写进卫星集合。
 
如何使SharpDevelop明白您的字符串:
当首次使用您的字符串的时候运行下面的命令:ResourceService.RegisterStrings("MyAddinName.Resources.StringResources",
                               
GetType().Assembly)
这将使SharpDevelop加载字符串并把他们合并进ResourceService.无论使用者在任何时候改变UI(用户界面)语言,正确的卫星集合都将被自动加载(或者再加).
原创粉丝点击