0

我的资源文件位于一个单独的 dll 中,并且都标记为:

  • 构建操作 - 嵌入式资源
  • 复制到输出目录 - 不要复制
  • 自定义工具 - PublicResXFileCodeGenerator

添加了自定义文化文件:SiteLabels.en-customer.resx
添加了新的文化 en-customer 作为源自“en”的中性语言

string culture = "en-customer";    
CultureAndRegionInfoBuilder cultureAndRegionInfoBuilder = new        
CultureAndRegionInfoBuilder(culture, CultureAndRegionModifiers.Neutral);
CultureInfo cultureInfo = new CultureInfo(twoLetterISOLanguageName);               
cultureAndRegionInfoBuilder.LoadDataFromCultureInfo(cultureInfo);
cultureAndRegionInfoBuilder.Parent = cultureInfo;

cultureAndRegionInfoBuilder.CultureEnglishName = culture;
if (CultureInfo.GetCultures(CultureTypes.UserCustomCulture).Any(cult => cult.Name == culture))
{
    CultureAndRegionInfoBuilder.Unregister(culture);
}
cultureAndRegionInfoBuilder.Register();

构建项目并看到卫星程序集 en-customer\MyResources.resources.dll
不是由 VS 创建的

阅读 SO 中有关此问题的所有答案,并没有看到任何关于该问题的投诉,只有关于使用 CLI 创建附属程序集的建议。
这种情况下的问题是引用我的资源 dll 的项目不会将新创建的附属程序集复制到它的 bin 文件夹中。

4

1 回答 1

3

这个问题的解决方法非常简单:
在机器上注册新的自定义文化后,您必须重新启动 VS2010才能为新添加的自定义文化生成附属程序集。

显然 VS2010(希望 MS 在 2012 年修复它)在加载时缓存机器上的文化,并且不会为它不知道的文化的 resx 文件创建附属程序集。没有警告,没有错误,只是无声的死亡。
我使用了两个 VS 实例,因此在第一个实例中注册不会影响另一个实例。

希望这会帮助某人

ps在我的资源 dll 中,我创建了一个 .tt 文件,在每次构建时都会扫描资源并搜索自定义资源文件,以创建一个包含所有自定义资源的变量的类。
我使用此变量来注册我的自定义文化 + 如果所有自定义文化都已在机器上注册,则检查 Application_Start。

于 2013-06-23T07:07:12.723 回答