C# 在.NET2.0中重新命名应用程序资源
我即将开始在.NET2.0(C#)中编写一个工具,该工具需要重新品牌化,以便出售给其他公司使用。我们将利用其他公司的资源在内部编译该工具,这样他们就不会得到源代码,只会得到生成的输出C# 在.NET2.0中重新命名应用程序资源,c#,.net,deployment,resources,branding,C#,.net,Deployment,Resources,Branding,我即将开始在.NET2.0(C#)中编写一个工具,该工具需要重新品牌化,以便出售给其他公司使用。我们将利用其他公司的资源在内部编译该工具,这样他们就不会得到源代码,只会得到生成的输出 由于重新品牌化将使用相同的默认语言,您如何管理同一语言集的多个资源,而不做一些低级的事情,例如在构建时用脚本交换resx文件,或者做一些更低级的事情(更容易出错),例如对客户A使用en-US,对客户B使用en-CA,对客户C使用en-GB,等等。您可以尝试使用附属程序集 我们在项目中发现,最简单的方法是在自己的DL
由于重新品牌化将使用相同的默认语言,您如何管理同一语言集的多个资源,而不做一些低级的事情,例如在构建时用脚本交换resx文件,或者做一些更低级的事情(更容易出错),例如对客户A使用en-US,对客户B使用en-CA,对客户C使用en-GB,等等。您可以尝试使用附属程序集
我们在项目中发现,最简单的方法是在自己的DLL中创建品牌,然后通过反射动态加载。如果需要,有两种明显的方法来本地化任何品牌:
在我看来,选择1容易得多,但两者都是可行的。当然,还有其他本地化方法。我决定采用的方法是使用TextOverrides类。此类公开了一系列属性,例如:
public static string ProductName
{
get
{
#if <companyNameA>
return Properties.Resources.ProductName_CompanyNameA;
#elif <companyNameB>
return Properties.Resources.ProductName_CompanyNameB;
#else
return Properties.Resources.ProductName;
#endif
}
}
publicstaticstringProductName
{
得到
{
#如果
返回Properties.Resources.ProductName\u CompanyNameA;
#埃利夫
返回Properties.Resources.ProductName\u CompanyNameB;
#否则
返回Properties.Resources.ProductName;
#恩迪夫
}
}
只有在覆盖的文本项的数量仍然很小的情况下,这才是可行的