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
的时候
背景里的衬垫是不会引起集合的加载的
.
addin
文件没有编写入集合,而是复制到了输出目录
.
(BuildAction=None
,
CopyToOuputDirectory=Always;
模板应该已经为您设置了这些属性
)
。
4资源的使用
模板通过利用
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
,所以在你完成的时候不要忘记关掉它
.
有两种类型的位图:
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"
/>
你可以使用
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)
GetType().Assembly)
这将使
SharpDevelop
加载字符串并把他们合并进
ResourceService.
无论使用者在任何时候改变
UI(
用户界面
)
语言
,
正确的卫星集合都将被自动加载
(
或者再加
载
).