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

 
1 关于 AddIn 构建指南
本文也许可以作为遵照构建计划编写 develop 但并不讲述如何去扩展 SharpDevelop
2 文件结构
每个 addin 应该在 src/ 文件夹里的某处有一个自己的目录 . 它应该提供一个用于建立或清除项目的项目计划文件。
您的 AddIn 拥有自己的目录 , 并且根文件夹包含一个解答文件。 在根文件夹里面,可以有二个次目录 : 项目和测试。 项目 Addin 本身 ,‘ 测试 是一套给 AddIn 的单位测试 ( 单位测试源文件和项目文件 )
项目 目录包含以下次目录和文件:
名字
内容
描述
项目名 . csproj
MSBuild 文件
addin 的项目文件
项目名 .addin
AddIn 定义文件
Contains XML 树的 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.dll ICSharpCode.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.1 XmlForms 和其他文件
模板通过利用 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”.
在所有字符串里的 XML addin 定义文件和在 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( 用户界面 ) 语言 , 正确的卫星集合都将被自动加载 ( 或者再加 ).
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值