东哥技术专栏 - Coldwine's Blog

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
 

使用.NET进行编程时,当需要创建多语言的应用程序,并且使应用程序具有更新语言包的功能,就需要用到附属程序集。用附属程序集功能来部署应用程序的资源与以往资源文件的使用方式大不相同,现将学习过程中遇到的问题和经验总结如下:

一 步骤

(1)建立应用程序取名假设为YOURAPP。

(2)在解决方案内添加项目,选择新建项目,选择VC++项目,选择空项目(.net),名字取名为Resource目录指定为YOURAPP目录。项目生成后删除Resource项目中的所有项。并设置项目属性的配置类型为实用工具。

(3)在新生成的resource目录中放置制作好的资源文件,或者可以使用RESGEN.EXE从现有的文本文件或者位图等文件生成资源文件,注意,生成的资源文件用*.resources扩展名存储,取名规则为:假设默认区域资源为abc.resources 则 不同区域的资源文件为 abc.区域名称.resources 比如中国:abc.zh-CN.resources

(4)将制作好的一系列资源文件添加到resource空项目中,并到YOURAPP项目中 使用解决方案资源管理引入abc.resources文件,显示所有文件,在目标文件上右键选择,包括在项目中。注意只需要引入这一个文件。这里的意图实际上等同于下列命令行:

csc.exe /out:bin\Debug\YOURAPP.exe 
/res:Resources\abc.resources,YOURAPP.Resources.abc.resources Form1.cs AssemblyInfo.cs

给应用程序设置默认资源的一个关联。

(5)右键点击resources项目中的资源文件选择属性,点击自定义生成步骤,命令行中填入如下命令,不要写在一行:

mkdir "$(ProjectDir)\..\bin\$(IntDir)\en"<回车>
al.exe /culture:en /out:"$(ProjectDir)\..\bin\$(IntDir)\en\YOURAPP.resources.dll" /embed:"$(InputPath)","YOURAPP.Resources.$(InputFileName)"
/template:"$(ProjectDir)\..\obj\$(IntDir)\YOURAPP.exe"

输出中填入如下命令:$(ProjectDir)\..\bin\$(IntDir)\en\YOURAPP.resources.dll

输出中填入如下命令:$(ProjectDir)\..\bin\$(IntDir)\en\YOURAPP.resources.dll

注意:

a.上面所有提到en的地方需要用相应的区域名称替换,注意默认的资源文件不需要做此设置。

b.这里使用的路径宏定义,可能会跟你的机器稍有不同,填写时对照你的宏来填写。

(6)设置好命令之后右键点击资源文件会有编译按钮,点击后应该在DEBUG(或者RELEASE)中生成/BIN/debug/en/YOURAPP.resources.dll每个区域目录中有同样文件。

(7)现在可以开始调用了,调用可使用如下代码实现:

System.Resources.ResourceManager rm=new System.Resources.ResourceManager
("YOURAPP.Resources.abc",System.Reflection.Assembly.GetExecutingAssembly ());

textBox1.Text=rm.GetString ("str1");

至此就完成了附属程序集的建立工作,当然也可以使用全命令行的方式来操作。

二 注意事项

1。使用resources作为目录以及VC++项目名称,似乎这个名称是一个固定引用名称

2。附属程序集中的资源与程序集中的不同区域的资源有冲突,假设你的FORM1有一个FORM1.EN.RESX文件,那么当你使用附属程序集时EN区域的资源将无法正确取得,所以你需要将自动生成的区域资源删除。

3。一定要设置默认资源文件和YOURAPP的关联

4。当需要添加新的区域设置时,只要建立区域名称的目录,拷贝DLL即可。因此可以发布程序后再分发语言包。






posted on 2005-08-01 02:12  东哥技术专栏 - Coldwine's Blog  阅读(762)  评论(0编辑  收藏  举报