Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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# 嵌入多个卫星组件的资源';s_C#_Asp.net_Localization_Embedded Resource_Satellite Assembly - Fatal编程技术网

C# 嵌入多个卫星组件的资源';s

C# 嵌入多个卫星组件的资源';s,c#,asp.net,localization,embedded-resource,satellite-assembly,C#,Asp.net,Localization,Embedded Resource,Satellite Assembly,我知道关于卫星装配有几个问题,但我在尝试实现它们时仍然遇到一些麻烦 我的目标是在单个程序集中分离每个区域性,使我能够灵活地在需要时一次只重新编译一个程序集。如果我只想对一种语言做一些小的更改,我不想编译所有语言 我想充分了解卫星装配的工作原理。这是我目前的理解: 卫星程序集可以放置在bin目录中,而无需重新编译整个应用程序,这意味着应用程序不需要这些程序集才能正常工作(只要指定了回退资源) 美国必须与单一文化相联系 现在,我可以使用al工具生成S.a。如果我添加.resx文件,Visual

我知道关于卫星装配有几个问题,但我在尝试实现它们时仍然遇到一些麻烦

我的目标是在单个程序集中分离每个区域性,使我能够灵活地在需要时一次只重新编译一个程序集。如果我只想对一种语言做一些小的更改,我不想编译所有语言

我想充分了解卫星装配的工作原理。这是我目前的理解:

  • 卫星程序集可以放置在bin目录中,而无需重新编译整个应用程序,这意味着应用程序不需要这些程序集才能正常工作(只要指定了回退资源)

  • 美国必须与单一文化相联系

现在,我可以使用
al
工具生成S.a。如果我添加.resx文件,Visual Studio可以为我生成S.a.(在bin文件夹中,我可以看到指定区域性的文件夹结构)

问题1。这些dll是由Visual Studio生成的还是由
al
工具生成的

问题2。所有这些dll必须共享一个通用名称才能工作吗??(我知道它们应该保持一致性,但是如果它们不共享名称,比如说使用指定不同名称的
al
工具创建它们)它们仍然可以被要加载的.Net framework识别吗

问题3。如果我想使用
ResourceManager
类,是否必须为每个程序集区域性实例化一个实例?(由于它们的名称中包含区域性,它们具有不同的程序集名称,我是否必须手动格式化要加载的嵌入式资源文件以匹配当前区域性并手动加载该程序集?由于它们可能不会第一次加载,我是否必须通过指定区域性文件夹中的文件路径来手动加载)

问题4。这些S.A.是由.Net framework自动加载还是必须显式加载

问题5。如果我必须加载它们,这意味着如果我想在我的控件标记中声明性地指定资源,我是否必须创建并注册一个自定义资源工厂才能加载它们

问题6。如果我在visual studio的一个类项目中为多个区域性添加了多个资源,而没有代码,它们会自动嵌入,当我编译时,会创建每个区域性的附属程序集,这些dll相关吗?我想知道它们是否有名字、名称空间或其他方面的联系

所有这些问题都基于此:我想我可以将程序集添加到bin文件夹,并在
ResourceManager
中指定类似全局程序集的内容,这样即使资源位于不同的程序集中,它也会自动加载资源(这就是为什么我关心程序集名称或几个附属程序集之间的关系)就像在单个程序集中定义资源一样,您只需调用
resources.MyResourceKey
,就是这样


我很欣赏你的hellp,这个话题让我发疯了=(

我知道
resgen
al
工具看起来比它们应该的要复杂一些,但我非常确定你的目标是可以实现的,也就是说,你可以在Visual Studio解决方案之外构建卫星程序集(以避免您必须在解决方案中维护所有已翻译的资源),但得到完全相同的结果

问题1:是

问题2:是的,ResourceManager依赖命名约定加载本地化资源

问题3否。您可以使用标准ResourceManager。事实上,您根本不必直接使用ResourceManager。将基本资源包括在解决方案中,并使用Build Action=Embedded Resource和Custom Tool=PublicResXFileCodeGenerator对其进行配置,然后Visual Studio将自动生成并维护类(与您的resx文件同名),允许您通过静态属性访问资源。根据Thread.CurrentThread.CurrentUICulture和部署的附属程序集,这些属性将为您提供附属程序集或基础程序集的本地化资源

问题4:否。ResourceManager会自动执行此操作

问题5:见第四季度。无事可做


问题6:参见问题2。它基于命名约定(根据区域性命名的文件夹,根据基本dll命名的附属程序集)和元数据(例如,使用al编译时使用的区域性名称)

关于问题3的答案:“将基本资源包含在解决方案中,并使用……对其进行配置”是什么意思我想资源已经存在于DLL中,每个区域性对应一个DLL。我将这些DLL(带有区域性名称文件夹)放在另一个项目中以使用它们,但资源管理器总是返回英语,似乎它没有查看/识别其他区域性DLL