Событие AppDomain AssemblyResolve запрашивает Microsoft.Practices.EnterpriseLibrary.Common.resources - PullRequest
3 голосов
/ 15 марта 2011

Я написал собственный метод AssemblyResolve для обработки сборки в папке, отличной от exe-файла. Но однажды он показывает отсутствующий «Microsoft.Practices.EnterpriseLibrary.Common.resources». Хотя у меня есть Microsoft.Practices.EnterpriseLibrary.Common.dll, у меня нет Microsoft.Practices.EnterpriseLibrary.Common.resources.dll. Как вручную загрузить Microsoft.Practices.EnterpriseLibrary.Common.resources?

protected Assembly ConfigResolveEventHandler(object sender, ResolveEventArgs args)
        {
            //This handler is called only when the common language runtime tries to bind to the assembly and fails.

            //Retrieve the list of referenced assemblies in an array of AssemblyName.
            string strTempAssmbPath = "";
            Assembly asm = this.GetType().Assembly;

            var uri = new Uri(Path.GetDirectoryName(asm.CodeBase));


            Assembly objExecutingAssemblies = Assembly.GetExecutingAssembly();
            AssemblyName[] arrReferencedAssmbNames = objExecutingAssemblies.GetReferencedAssemblies();

            //Loop through the array of referenced assembly names.
            if (arrReferencedAssmbNames.Any(strAssmbName => strAssmbName.Name == args.Name))
            {
                strTempAssmbPath = Path.Combine(uri.LocalPath, args.Name) + ".dll";
            }
            //Load the assembly from the specified path.                    
            Assembly myAssembly = Assembly.LoadFrom(strTempAssmbPath);

            //Return the loaded assembly.
            return myAssembly;  
        }

Ответы [ 2 ]

3 голосов
/ 22 августа 2011

Проблема обсуждалась в Microsoft Connect .

Предлагаемое решение: Добавьте следующую строку в AssemblyInfo.cs:

[assembly: NeutralResourcesLanguageAttribute("en-US", UltimateResourceFallbackLocation.MainAssembly)]
2 голосов
/ 05 апреля 2012

Мы столкнулись с той же проблемой с обработчиком событий AssemblyResolve.Как ни странно, мы видели эту проблему только на компьютерах с Windows XP.Наше приложение локализовано на многие языки, поэтому мы не решались использовать атрибут NeutralResourcesLanguageAttribute.Наше приложение было скомпилировано для .NET v3.5, но на него все еще влияло изменение AssemblyResolve задокументировано для .NET v4.0:

Внимание Начиная с .NET Framework 4, событие ResolveEventHandler возникает для всех сборок, включая сборки ресурсов.В более ранних версиях событие не было инициировано для сборок ресурсов.Если операционная система локализована, обработчик может вызываться несколько раз: по одному разу для каждой культуры в резервной цепочке.

Мы решили, что это нужно, чтобы проверить e.Name и посмотреть, ищет ли ондля * .Resources.dll.Если этот файл не был найден в AppDomain или в известной папке, мы удалили бы «.Resources» и искали * .dll.Если этот файл существует, мы загружаем и возвращаем эту сборку.Это решило проблему для нас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...