我知道卫星装配有几个问题,但我在尝试实施它们时仍有一些麻烦
我的目标是在一个程序集中分离每个文化,让我可以灵活地在需要时一次重新编译一个程序集,如果我只想做一些小的改动,我不想编译所有语言只有一种语言
我想完全理解卫星大会的工作方式。这是我目前的理解:
可以在bin目录中删除Satellite Assembly,而无需重新编译整个应用程序,这意味着应用程序不需要这些程序集才能正常工作(只要指定了回退资源)
S.A。必须与单一文化相关联
现在我可以使用al
工具生成SA,或者Visual Studio可以为我做,如果我添加.resx文件,则创建SA(在bin文件夹中我可以看到文件夹结构指定的文化)
问题1。这些dll是否等效,由Visual Studio生成的那个和使用al
工具生成的那个?
问题2。所有这些dll必须共享一个通用名称才能工作吗? (我知道他们应该保持一致性,但是如果他们不共享名称,让我们说使用指定不同名称的al
工具创建它们),它们仍然可以被.Net框架识别以加载吗?
问题3。如果我想使用ResourceManager
类,我是否必须为每个汇编文化实例化一个实例? (并且因为它们在名称中包含文化,它们具有不同的程序集名称,我是否必须手动格式化嵌入的资源文件以加载以匹配当前文化并手动加载该程序集?因为它们可能不会在第一次加载,我是否必须通过指定 culture文件夹中的文件路径手动加载?)
问题4。 .Net框架会自动加载这些S.A.还是必须明确加载它们?
问题5 。如果我必须加载它们,这意味着如果我想在我的控制标记中以声明方式指定资源,是否必须创建并注册自定义资源工厂才能加载它们?
问题6。如果我在visual studio中的类项目中为几个文化添加了几个没有代码的资源,它们会自动嵌入,当我编译时,会创建每个文化的附属程序集,这些dll有关系吗?我想知道它们是否与名称,名称空间或其他东西相关
所有这些问题都基于此:我以为我能够将程序集添加到bin文件夹并在ResourceManager
中指定类似全局程序集的内容,以及它会自动加载资源,即使它们在不同的程序集中(这就是我对程序集名称的关注或几个附属程序集相关的原因),就像在单个程序集中定义资源一样,只需调用{{1那就是它
我很欣赏你的hellp,这个话题让我发疯了=(
答案 0 :(得分:3)
我知道resgen
和al
工具看起来比它们应该更复杂,但我很确定你的目标是可以实现的,即你可以在一个外面建立你的卫星组件Visual Studio解决方案(为了节省您必须在解决方案中维护所有已翻译的资源),但获得完全相同的结果。
问题1 :是
问题2 :是的,ResourceManager依赖于加载本地化资源的命名约定
问题3 :不可以。您可以使用标准的ResourceManager。实际上,您根本不必直接使用ResourceManager。在解决方案中包含基本资源并使用Build Action = Embedded Resource和Custom Tool = PublicResXFileCodeGenerator对其进行配置,然后Visual Studio将自动生成并维护一个类(与resx文件同名),允许您通过静态属性访问资源。根据Thread.CurrentThread.CurrentUICulture以及部署的附属程序集,这些属性将为您提供来自附属程序集或基本程序集的本地化资源。
问题4 :不。资源管理器会自动执行此操作。
问题5 :参见问题4。无所事事。
问题6 :请参阅Q2。它基于命名约定(按文化名称命名的文件夹,按基本dll命名的附属程序集)和元数据(例如,使用al编译时使用的文化名称)