Динамически получить доступ к классу Resources

168
17 апреля 2019, 05:30

Не получается получить доступ к классу Resources DLL динамически. Обычный способ получения функций Activator.CreateInstance(type) не работает из-за ошибки.

Файл Resources из DLL. Нужно в Form получить метод hero3, который появился при добавлении картинки, и вывести ее в Form.

//------------------------------------------------------------------------------
// <auto-generated>
//     Этот код создан программой.
//     Исполняемая версия:4.0.30319.42000
//
//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
//     повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace mydll.Properties {
    using System;

    /// <summary>
    ///   Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
    /// </summary>
    // Этот класс создан автоматически классом StronglyTypedResourceBuilder
    // с помощью такого средства, как ResGen или Visual Studio.
    // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
    // с параметром /str или перестройте свой проект VS.
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    public class Resources {
        private static global::System.Resources.ResourceManager resourceMan;
        private static global::System.Globalization.CultureInfo resourceCulture;
        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
        internal Resources() {
        }
        /// <summary>
        ///   Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
        /// </summary>
        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        public static global::System.Resources.ResourceManager ResourceManager {
            get {
                if (object.ReferenceEquals(resourceMan, null)) {
                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("mydll.Properties.Resources", typeof(Resources).Assembly);
                    resourceMan = temp;
                }
                return resourceMan;
            }
        }
        /// <summary>
        ///   Перезаписывает свойство CurrentUICulture текущего потока для всех
        ///   обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
        /// </summary>
        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        public static global::System.Globalization.CultureInfo Culture {
            get {
                return resourceCulture;
            }
            set {
                resourceCulture = value;
            }
        }
        /// <summary>
        ///   Поиск локализованного ресурса типа System.Drawing.Bitmap.
        /// </summary>
        public static System.Drawing.Bitmap hero3 {
            get {
                object obj = ResourceManager.GetObject("hero3", resourceCulture);
                return ((System.Drawing.Bitmap)(obj));
            }
        }
    }
}
Answer 1

Activator.CreateInstance не нужен, так как свойство статическое. Сделайте как-то так:

using System;
using System.Reflection;
using System.Linq;
// ...          
Assembly ass = Assembly.LoadFrom("путь к DLL");
TypeInfo t = ass.DefinedTypes.Where((x) => (x.Name == "Resources")).First();
PropertyInfo prop = t.DeclaredProperties.Where((x) => (x.Name == "hero3")).First();
var bitmap = (System.Drawing.Bitmap) prop.GetMethod.Invoke(null,new object[] { });
READ ALSO
Как переделать переменную RaycastHit в GameObject

Как переделать переменную RaycastHit в GameObject

Пускаю лучь, получаю переменную RaycastHit hitТеперь мне нужно узнать какой это обьект и записать его в переменную GameObject hittedObject

159
Как изменить цвет стиля для всех форм?

Как изменить цвет стиля для всех форм?

У меня есть основная форма и форма настройкиВ форме настройки я должен менять цвет формы и она должна передаваться на все остальные формы

186
Условные переходы if c#

Условные переходы if c#

помогите пожалуйста разобраться не пойму, как добавит третьего оператора, задача такая при вводе роста, программа говорит, какого роста человек...

184