0

シナリオ:ソリューションに存在する実行時にアセンブリをロードしたい。

ベロコードはCuurentAppDomainに存在しないため、機能しません。

Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();

また、参照されているアセンブリを検索する場合も、参照されていないため見つかりません。したがって、以下のコードも機能しません。

public static IEnumerable<Assembly> GetAssemblies()
    {
        var list = new List<string>();
        var stack = new Stack<Assembly>();

        stack.Push(Assembly.GetEntryAssembly());

        do
        {
            var asm = stack.Pop();

            yield return asm;

            foreach (var reference in asm.GetReferencedAssemblies())
                if (!list.Contains(reference.FullName))
                {
                    stack.Push(Assembly.Load(reference));
                    list.Add(reference.FullName);
                }

        }
        while (stack.Count > 0);

    }

何か提案はありますか?

4

1 に答える 1

0

アセンブリに署名してから、app.config で完全修飾アセンブリ名を指定します。Assembly.Load(string)を呼び出して、app.config からアセンブリ名を渡します。

注: 読み込もうとしているアセンブリは、ランタイムが検出できる場所にある必要があります。あなたの最善の策は、それをGlobal Assembly Cacheに入れるか、実行中のアセンブリと同じフォルダーにあることを確認することです。

于 2012-10-11T14:20:20.590 に答える