65.9K
CodeProject 正在变化。 阅读更多。
Home

StringsResourceGenerator,自定义任务+加载项,用于从代码管理ResourceDictionary中的字符串

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.05/5 (8投票s)

2008 年 5 月 28 日

CPOL

4分钟阅读

viewsIcon

29227

downloadIcon

343

创建用于字符串的XAML文件,并生成一个类以简化代码中的使用。

引言

此加载项允许您将字符串定义到项目中的ResourceDictionary中,并像使用RESX文件一样在代码中使用它们。这样,在本地化过程中,您无需合并卫星DLL。

MSBuild的自定义任务

此工具的核心是StringsResourceGeneratorTask,这是一个在MSBuild的BeforeBuild步骤中运行的自定义任务。您可以不使用StringsResourceGenerator加载项,而是将DLL安装到GAC中并手动编辑项目文件来使用此任务。在项目文件的底部,作为Project节点的子节点,您需要添加

<UsingTask
    TaskName="StringsResourceGeneratorTask"
    AssemblyName="StringsResourceGeneratorTask,
        Version=1.0.0.0,
        Culture=neutral,
        PublicKeyToken=157d1456ea169140" />
<Target
    Name="BeforeBuild">
    <StringsResourceGeneratorTask
    Namespace="YourNamespace"
    AssemblyName="YourAssembly"
    ClassName="YourClassName"
    StringsResourceFileName="YourRelativeFileNamePath" />
</Target>

有关UsingTaskTarget标签的信息,请参见“参考文献”部分。StringsResourceGeneratorTask标签定义了自定义标签及其属性(特性)。Namespace属性指定将创建的类的命名空间。AssemblyName属性定义项目的程序集。ClassName是将生成的类的名称。StringsResourceFileName是XAML和CS文件的相对路径(例如,如果文件名为“Folder1”下的LocalizableStrings.xamlLocalizableStrings.xaml.cs,则StringsResourceFileName的值将为“Folder1/LocalizableStrings”,不需要扩展名)。

重新加载项目。将出现一个对话框

选择“正常加载项目”。

此任务只能为C#生成代码,但很容易扩展到其他语言。您必须继承TypeCodeController类并重写StringsCodeTemplate属性和GeneratePropertyCode函数。用于生成C#代码的CSController类就是一个示例。

在项目中,您必须插入一个.xaml文件和一个.cs文件。.cs文件必须与XAML文件位于同一路径,并具有相同的名称,扩展名为.xaml.cs

获得它的最简单方法是插入一个WPF用户控件。在XAML中,将所有内容替换为空的ResourceDictionary,其中包含对MsCorlib库的引用和命名空间的“system”前缀。“system”前缀非常重要,因为自定义任务将使用它。

<ResourceDictionary
    xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:system="clr-namespace:System;assembly=mscorlib">
</ResourceDictionary>

在C#文件中,删除所有内容。如果要添加字符串,请转到XAML文件并添加

system:String x:Key="MyString">Hello World!</system:String>

然后编译项目(参见“已知错误”)。现在,如果要显示一个MessageBox,您可以编写

MessageBox.Show(YuourClassName.MyString);

Documentation.zip中,有一个名为“如何使用StringsResourceGeneratorTask”的doc文件,详细解释了任务的设置。

以下是任务的方案

加载项

此加载项在“工具”主菜单中添加一个名为“StringsResourceGenerator...”的项目。您必须在项目中选择一个项目或文件夹,您希望在其中添加用于从代码管理字符串的XAML和cs文件。然后,单击加载项项目。将出现一个对话框

StringsResourceFileName表示ResourceDictionary和代码的文件名。例如,如果您选择LocalizableStrings,则将在项目中添加两个文件:LocalizableStrings.xamlLocalizableStrings.xaml.cs

Namespace是将添加类的命名空间。AssemblyName是编译过程生成的程序集的名称。ClassName表示将生成的类的名称。生成文件后,您可以手动修改(或删除)文件名或类名,您必须编辑项目文件并更改与StringsResourceGeneratorTask相关的属性。加载项使用模板将文件添加到项目。在安装过程中,模板将位于Visual Studio 2008 C#项目模板下。没有VB的模板。

支持的环境

Visual Studio 2008是完全支持的环境。如果您使用Visual Studio 2005,则只能使用自定义任务并手动设置它(参见“MSBuild的自定义任务”)。

未来发展

支持VB项目。

已知bug

使用加载项菜单项添加XAML和cs文件后,第一次编译不起作用。第二次编译后,一切正常。如果您的项目没有WindowsBasePresentationFramework作为引用,则必须手动添加它们。如果您选择项目根目录,则加载项不起作用!您必须选择一个项目或文件夹。如果您修改或删除以前创建的资源文件,则项目文件不会自动更新。

参考文献

对于自定义任务

对于加载项部署

© . All rights reserved.