0

私はたくさんグーグルを試しましたが、解決策を見つけることができませんでした。

助けてください。

カスタム アクションが割り当てられているインストーラー クラスを実行する Windows アプリケーション セットアップ ウィザードがあります。

プロジェクトは、プラグイン アーキテクチャにあります。

インストール中に、プリンタードライバーをインストールする必要があります。インストーラークラスには、そのプラグインを呼び出してインストールするためのコードがあります。

しかし、ロードされたプラグインの GetTypes() プロパティを取得しようとすると、ローダー例外エラーが発生し、インストーラーが終了します。

Windows アプリケーションを実行すると、GetTypes() プロパティが正しく機能します。

これが私のコードです。様子を見て、異常がないか確認してください。

   private static List<Assembly> LoadPlugInAssemblies()
    {

        DirectoryInfo dInfo = new DirectoryInfo(Path.Combine(Assembly.GetExecutingAssembly().Location.Replace("PluginSDK.dll", ""), "Plugins")); 

        FileInfo[] files = dInfo.GetFiles("*.dll");

        List<Assembly> plugInAssemblyList = new List<Assembly>();

        if (null != files)
        {
            foreach (FileInfo file in files)
            {
                plugInAssemblyList.Add(Assembly.LoadFile(file.FullName));
            }
        }
        return plugInAssemblyList;
    }

    static List<IUserFunctionPlugin> GetPlugIns(List<Assembly> assemblies)
    {
        List<Type> availableTypes = new List<Type>();

        foreach (Assembly currentAssembly in assemblies)
            availableTypes.AddRange(currentAssembly.GetTypes());

        List<Type> pluginList = availableTypes.FindAll(delegate(Type t)
        {
            List<Type> interfaceTypes = new List<Type>(t.GetInterfaces());
            object[] arr = t.GetCustomAttributes(typeof(PluginAttributes), true);
            return !(arr == null || arr.Length == 0) && interfaceTypes.Contains(typeof(IUserFunctionPlugin));
        });

        // CONVERT THE LIST OF OBJECTS TO AN INSTANTIATED LIST OF IPlugins
        return pluginList.ConvertAll<IUserFunctionPlugin>(delegate(Type t) { return Activator.CreateInstance(t) as IUserFunctionPlugin; });
    }

Assembly.ReflectionOnlyLoad を試しましたが、同じエラーが発生しました。前もって感謝します!!!

4

1 に答える 1

0

それがアセンブリバインドエラーの場合は、Fuslogvw.exe(アセンブリバインドログビューア)を実行して、エラーに関する詳細情報を収集してみてください。

于 2012-08-02T04:50:55.373 に答える