我知道有关卫星程序集的问题已经有很多了,但是在实现它们时我仍然遇到了一些问题。
我的目标是将每种语言文化分别放入一个程序集中,这样我就可以灵活地在需要时只重新编译一个程序集,而不必编译所有语言,即使我只想对一个语言进行一些微小的更改也是如此。
我希望完全理解卫星程序集的工作原理。这是我目前的理解:
- 卫星程序集可以在不需要重新编译整个应用程序的情况下放入 bin 目录中,这意味着只要指定回退资源,应用程序就不需要这些程序集才能正常工作。 - S.A. 必须链接到单个文化。
现在我可以使用 al 工具生成 S.A., 或者如果我添加了 .resx 文件,Visual Studio 可以为我创建 S.A. (在 bin 文件夹中可以看到指定文化的文件夹结构)。
问题 1:这些 dll 是否等效?由 Visual Studio 生成和由 al 工具生成的 dll 是否相同?
问题 2:所有这些 dll 是否必须共享一个公共名称才能工作?(我知道为了一致性,它们应该共享名称,但如果它们不共享名称,比如使用 al 工具指定不同的名称创建它们,它们仍然可以被 .Net 框架识别并加载吗?)
问题 3:如果我想使用 ResourceManager 类,是否必须为每个程序集文化实例化一个实例?(由于它们在名称中包含文化,它们具有不同的程序集名称,我是否必须手动格式化嵌入式资源文件以匹配当前文化并手动加载该程序集?由于它们可能不会在第一次加载时加载,所以我是否必须通过指定“文化文件夹”内的文件路径来手动加载它们?)
问题 4:这些 S.A. 是否由 .Net 框架自动加载,还是我必须明确加载它们?
问题 5:如果我必须加载它们,这意味着如果我想在我的控件标记中声明资源,我必须创建并注册一个自定义资源工厂才能加载它们吗?
问题 6:如果我在 Visual Studio 的类项目中添加了几种语言的多个资源且没有代码,它们会自动嵌入,当我编译时,将为每种文化创建卫星程序集,这些 dll 是否相关?我想知道它们是否由名称、命名空间或其他东西相关。
所有这些问题都基于以下内容:我原以为只需将程序集添加到bin文件夹中,并在
感谢您的帮助,这个主题让我发疯了 =(
我的目标是将每种语言文化分别放入一个程序集中,这样我就可以灵活地在需要时只重新编译一个程序集,而不必编译所有语言,即使我只想对一个语言进行一些微小的更改也是如此。
我希望完全理解卫星程序集的工作原理。这是我目前的理解:
- 卫星程序集可以在不需要重新编译整个应用程序的情况下放入 bin 目录中,这意味着只要指定回退资源,应用程序就不需要这些程序集才能正常工作。 - S.A. 必须链接到单个文化。
现在我可以使用 al 工具生成 S.A., 或者如果我添加了 .resx 文件,Visual Studio 可以为我创建 S.A. (在 bin 文件夹中可以看到指定文化的文件夹结构)。
问题 1:这些 dll 是否等效?由 Visual Studio 生成和由 al 工具生成的 dll 是否相同?
问题 2:所有这些 dll 是否必须共享一个公共名称才能工作?(我知道为了一致性,它们应该共享名称,但如果它们不共享名称,比如使用 al 工具指定不同的名称创建它们,它们仍然可以被 .Net 框架识别并加载吗?)
问题 3:如果我想使用 ResourceManager 类,是否必须为每个程序集文化实例化一个实例?(由于它们在名称中包含文化,它们具有不同的程序集名称,我是否必须手动格式化嵌入式资源文件以匹配当前文化并手动加载该程序集?由于它们可能不会在第一次加载时加载,所以我是否必须通过指定“文化文件夹”内的文件路径来手动加载它们?)
问题 4:这些 S.A. 是否由 .Net 框架自动加载,还是我必须明确加载它们?
问题 5:如果我必须加载它们,这意味着如果我想在我的控件标记中声明资源,我必须创建并注册一个自定义资源工厂才能加载它们吗?
问题 6:如果我在 Visual Studio 的类项目中添加了几种语言的多个资源且没有代码,它们会自动嵌入,当我编译时,将为每种文化创建卫星程序集,这些 dll 是否相关?我想知道它们是否由名称、命名空间或其他东西相关。
所有这些问题都基于以下内容:我原以为只需将程序集添加到bin文件夹中,并在
ResourceManager
中指定类似于全局程序集的东西,即使资源位于不同的程序集中(这就是我对程序集名称或多个卫星程序集之间关系的担忧),它也会自动加载资源,就像在单个程序集中定义资源时一样,只需调用Resources.MyResourceKey
即可。感谢您的帮助,这个主题让我发疯了 =(