Visual studio vpackage安装后行为不同

本文关键字:studio vpackage 安装 Visual | 更新日期: 2023-09-27 18:15:52

我用c#开发了一个Visual studio 2010 vpackage。它的作用是在Treeview中显示程序集类型和方法。它使用如下的反射:

Assembly assembly = Assembly.LoadFile(strAssemblyPath);  
foreach (Type a_type in assembly.GetTypes())  
{  
    foreach (MethodInfo mi in a_type.GetMethods())  
    {  
        //code to handle methods here  
    }  
}  

我有几个引用其他程序集的程序集,它们都位于同一个文件夹中。

当我调试应用程序时,它工作得很好:当尝试从其他程序集加载类型时,getTypes()和getMethods()不会引发任何错误。

当我生成。vsix安装程序(调试或发布),并在安装后使用插件时,getTypes()和GetMethods()会引发以下类型的错误:"无法加载文件或程序集或其依赖项之一",但程序集在文件夹中…

更多信息:

  • 我使用我的vpackage解决方案的默认设置。
  • 调试中的命令行是"C:'Program Files (x86)'Visual Studio 2010 Ultimate'Common7'IDE' devv .exe/rootsuffix Exp"
  • 我在调试和安装包后对完全相同文件夹中的完全相同的程序集尝试相同的操作。
  • Visual studio在两种情况下都以管理员身份启动

有人知道为什么GetTypes()和GetMethods()的行为是不同的吗?

Visual studio vpackage安装后行为不同

嗯,我仍然不知道为什么行为不同,但是我能够通过正确的错误处理来限制错误的影响。我使用的错误处理是:

Type[] types = null;
try
{
    types = assembly.GetTypes();
}
catch (ReflectionTypeLoadException e)
{
    types = e.Types;
    StringBuilder strErrors = new StringBuilder();
    foreach (Exception exError in e.LoaderExceptions)
    {
        //Message errors can appear several times.
        if (!strErrors.ToString().Contains(exError.Message))
        {
             strErrors.Append(exError.Message);
             Exception innerError = exError.InnerException;
             while (innerError != null)
             {
                 strErrors.Append(innerError.Message);
                 innerError = innerError.InnerException;
             }
        }
    }
    //trace the error
}
if (types != null)
{
    foreach (Type a_type in types)
    {
         //handle types in here
    }
}

之前,我只是捕获了异常,没有处理在reflectiontypeloadeexception . types .

中定义的类型。