Visual Studio 2010不会为自定义文化生成附属程序集

时间:2013-06-23 07:07:13

标签: .net visual-studio-2010 resources globalization

我的资源文件位于一个单独的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文件夹。

1 个答案:

答案 0 :(得分:2)

这个问题的解决方案非常简单:
您必须在计算机上注册新的自定义区域性 后重新启动VS2010,以便为新添加的自定义区域性生成附属程序集。

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

希望这会对某人有所帮助

在我的资源dll中

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