MissingSatelliteAssemblyException 类

定义

默认区域性资源的附属程序集丢失时引发的异常。

public ref class MissingSatelliteAssemblyException : SystemException
public class MissingSatelliteAssemblyException : SystemException
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class MissingSatelliteAssemblyException : SystemException
type MissingSatelliteAssemblyException = class
    inherit SystemException
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type MissingSatelliteAssemblyException = class
    inherit SystemException
Public Class MissingSatelliteAssemblyException
Inherits SystemException
继承
MissingSatelliteAssemblyException
属性

示例

以下示例使用 NeutralResourcesLanguageAttribute 属性指示英语是应用的默认区域性,并且其资源存储在附属程序集中。 该示例本身包含英语和法语区域性 .txt 文件中的资源,如下表所述:

环境 资源名称/值 文件名
英语 Greet=Hello Greet.en.txt
法语 Greet=Bonjour Greet.fr.txt

以下源代码生成一个应用,该应用先将当前 UI 区域性更改为法语 (法国) ,然后更改为俄语 (俄罗斯) ,并在这两种情况下显示适当的区域性特定资源。

using System;
using System.Globalization;
using System.Resources;
using System.Threading;

[assembly:NeutralResourcesLanguageAttribute("en", UltimateResourceFallbackLocation.Satellite)]

public class Example
{
   public static void Main()
   {
      ResourceManager rm = new ResourceManager("GreetResources", typeof(Example).Assembly); 
      Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
      Console.WriteLine("The current UI culture is {0}", Thread.CurrentThread.CurrentUICulture.Name);
      Console.WriteLine(rm.GetString("Greet"));
      
      Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru-RU");
      Console.WriteLine("The current UI culture is {0}", Thread.CurrentThread.CurrentUICulture.Name);
      Console.WriteLine(rm.GetString("Greet"));
   }
}
// The example displays the following output when created using BuildNoDefault.bat: 
//    The current UI culture is fr-FR
//    Bonjour
//    The current UI culture is ru-RU
//    
//    Unhandled Exception: System.Resources.MissingSatelliteAssemblyException: 
//    The satellite assembly named "HelloWorld.resources.dll, PublicKeyToken=" for fallback culture 
//    "en" either could not be found or could not be loaded. This is generally a setup problem. 
//    Please consider reinstalling or repairing the application.
//       at System.Resources.ManifestBasedResourceGroveler.HandleSatelliteMissing()
//       at System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo cult
//    ure, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackC
//    rawlMark& stackMark)
//       at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture
//    , Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
//       at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean
//     createIfNotExists, Boolean tryParents)
//       at System.Resources.ResourceManager.GetString(String name, CultureInfo culture)
//       at Example.Main()
// The example displays the following output when created using BuildDefault.bat:
//    The current UI culture is fr-FR
//    Bonjour
//    The current UI culture is ru-RU
//    Hello
Imports System.Globalization
Imports System.Resources
Imports System.Threading

<assembly:NeutralResourcesLanguageAttribute("en", UltimateResourceFallbackLocation.Satellite)>

Module Example
   Public Sub Main()
      Dim rm As New ResourceManager("GreetResources", GetType(Example).Assembly) 
      Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR")
      Console.WriteLine("The current UI culture is {0}", Thread.CurrentThread.CurrentUICulture.Name)
      Console.WriteLine(rm.GetString("Greet"))
      
      Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru-RU")
      Console.WriteLine("The current UI culture is {0}", Thread.CurrentThread.CurrentUICulture.Name)
      Console.WriteLine(rm.GetString("Greet"))
   End Sub
End Module
' The example displays the following output:
'    The current UI culture is fr-FR
'    Bonjour
'    The current UI culture is ru-RU
'    
'    Unhandled Exception: System.Resources.MissingSatelliteAssemblyException: 
'    The satellite assembly named "HelloWorld.resources.dll, PublicKeyToken=" for fallback culture 
'    "en" either could not be found or could not be loaded. This is generally a setup problem. 
'    Please consider reinstalling or repairing the application.
'       at System.Resources.ManifestBasedResourceGroveler.HandleSatelliteMissing()
'       at System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo cult
'    ure, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackC
'    rawlMark& stackMark)
'       at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture
'    , Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
'       at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean
'     createIfNotExists, Boolean tryParents)
'       at System.Resources.ResourceManager.GetString(String name, CultureInfo culture)
'       at Example.Main()
' The example displays the following output when created using BuildDefault.bat:
'    The current UI culture is fr-FR
'    Bonjour
'    The current UI culture is ru-RU
'    Hello

可以使用以下批处理文件生成并执行示例的 C# 版本。 如果使用 Visual Basic,请将 csc 替换为 vbc,并将 .cs 扩展名替换为 .vb。 执行示例时,它将显示法语字符串,但当当前区域性为俄语 (俄罗斯) 时,会引发 MissingSatelliteAssemblyException 异常。 这是因为包含默认区域性资源的附属程序集 en\HelloWorld.dll 不存在。

vbc HelloWorld.vb  

md fr  
resgen Greet.fr.txt  
al /out:fr\HelloWorld.resources.dll /culture:fr /embed:GreetResources.fr.resources  

HelloWorld  

可以使用以下批处理文件生成和执行示例的 Visual Basic 版本。 如果使用的是 C#,请将 替换为 vbccsc,并将 扩展替换为 .vb.cs。 执行该示例时,当当前 UI 区域性为法语 (法国) 时,将显示法语字符串。 当当前 UI 区域性为俄罗斯 (俄语) 时,将显示英语字符串,因为俄语资源不存在,但资源管理器能够从附属程序集 en\HelloWorld2.dll 加载默认区域性的资源。

vbc HelloWorld.vb /out:HelloWorld2.exe  

md fr  
resgen GreetResources.fr.txt  
al /out:fr\HelloWorld2.resources.dll /culture:fr /embed:GreetResources.fr.resources  

md en  
resgen GreetResources.en.txt  
al /out:en\HelloWorld2.resources.dll /culture:en /embed:GreetResources.en.resources  

HelloWorld2  

注解

如果找不到相应的区域性特定资源,则默认区域性是加载其资源的区域性。 默认情况下,默认区域性的资源位于main程序集中,MissingManifestResourceException如果资源管理器尝试检索但找不到默认区域性的资源,则会引发 。 但是,如果 NeutralResourcesLanguageAttribute 属性将 location 参数的值指定UltimateResourceFallbackLocation.Satellite为 ,则.NET Framework将从附属程序集加载应用的默认区域性的资源。 在这种情况下, MissingSatelliteAssemblyException 当资源管理器尝试检索默认区域性的资源,并且缺少 属性中指定的 NeutralResourcesLanguageAttribute 区域性的附属程序集时,将引发异常。 请注意,异常是由资源检索方法(如 ResourceManager.GetStringResourceManager.GetObject)引发的,而不是在实例化对象时引发的 ResourceManager

MissingSatelliteAssemblyException 使用 HRESULT COR_E_MISSINGSATELLITEASSEMBLY,其值0x80131536。

MissingSatelliteAssemblyException 使用默认 Equals 实现,该实现支持引用相等性。

有关 类实例 MissingSatelliteAssemblyException 的初始属性值的列表,请参阅 MissingSatelliteAssemblyException 构造函数。

注意

应始终使用 NeutralResourcesLanguageAttribute 属性来定义应用的默认区域性,以便在特定区域性的资源不可用时,应用程序将显示可接受的行为。

构造函数

MissingSatelliteAssemblyException()

使用默认属性初始化 MissingSatelliteAssemblyException 类的新实例。

MissingSatelliteAssemblyException(SerializationInfo, StreamingContext)
已过时.

用序列化数据初始化 MissingSatelliteAssemblyException 类的新实例。

MissingSatelliteAssemblyException(String)

使用指定的错误消息初始化 MissingSatelliteAssemblyException 类的新实例。

MissingSatelliteAssemblyException(String, Exception)

使用指定的错误消息和对作为此异常原因的内部异常的引用来初始化 MissingSatelliteAssemblyException 类的新实例。

MissingSatelliteAssemblyException(String, String)

用指定的错误信息和非特定区域性的名称初始化 MissingSatelliteAssemblyException 类的新实例。

属性

CultureName

获取默认区域性的名称。

Data

获取键/值对的集合,这些键/值对提供有关该异常的其他用户定义信息。

(继承自 Exception)
HelpLink

获取或设置指向与此异常关联的帮助文件链接。

(继承自 Exception)
HResult

获取或设置 HRESULT(一个分配给特定异常的编码数字值)。

(继承自 Exception)
InnerException

获取导致当前异常的 Exception 实例。

(继承自 Exception)
Message

获取描述当前异常的消息。

(继承自 Exception)
Source

获取或设置导致错误的应用程序或对象的名称。

(继承自 Exception)
StackTrace

获取调用堆栈上的即时框架字符串表示形式。

(继承自 Exception)
TargetSite

获取引发当前异常的方法。

(继承自 Exception)

方法

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetBaseException()

当在派生类中重写时,返回 Exception,它是一个或多个并发的异常的根本原因。

(继承自 Exception)
GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetObjectData(SerializationInfo, StreamingContext)
已过时.

当在派生类中重写时,用关于异常的信息设置 SerializationInfo

(继承自 Exception)
GetType()

获取当前实例的运行时类型。

(继承自 Exception)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

创建并返回当前异常的字符串表示形式。

(继承自 Exception)

事件

SerializeObjectState
已过时.

当异常被序列化用来创建包含有关该异常的徐列出数据的异常状态对象时会出现该问题。

(继承自 Exception)

适用于

另请参阅