Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET2.0中重新命名应用程序资源_C#_.net_Deployment_Resources_Branding - Fatal编程技术网

C# 在.NET2.0中重新命名应用程序资源

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

我即将开始在.NET2.0(C#)中编写一个工具,该工具需要重新品牌化,以便出售给其他公司使用。我们将利用其他公司的资源在内部编译该工具,这样他们就不会得到源代码,只会得到生成的输出


由于重新品牌化将使用相同的默认语言,您如何管理同一语言集的多个资源,而不做一些低级的事情,例如在构建时用脚本交换resx文件,或者做一些更低级的事情(更容易出错),例如对客户A使用en-US,对客户B使用en-CA,对客户C使用en-GB,等等。

您可以尝试使用附属程序集


我们在项目中发现,最简单的方法是在自己的DLL中创建品牌,然后通过反射动态加载。如果需要,有两种明显的方法来本地化任何品牌:

  • 用另一个已本地化的DLL替换品牌DLL
  • 使用.NET支持的附属汇编技术

  • 在我看来,选择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;
    #恩迪夫
    }
    }
    
    只有在覆盖的文本项的数量仍然很小的情况下,这才是可行的