когда код пытается получить имя пространства имен через отражение, используя либо:
typeof(MyNamespace.MyClass).Namespace;
или другие методы, я хочу, чтобы имя пространства имен возвращало мою предопределенную строку.
Это не работает:
typeof(MyNamespace.MyClass).Namespace = "helloWorld";
в любом случае?
p.s. пожалуйста, не публикуйте ответы типа: «Изменить пространство имен в исходном коде» ...
any ways?
Измените пространство имен в исходном коде.
Интересно, какое требование привело к этому вопросу.
да, у меня есть конкретная причина для этого .. не могу объяснить.
Используйте Reflection.emit для создания новой сборки и сохранения на диск с новым пространством имен.
@ T.Todua Пожалуйста, объясните свое требование. Это все торговые марки XY проблема, и вы можете получить более точные предложения, если мы поймем, зачем вам это нужно.
Тода, вы, как и мы, точите тип «линзы» (чистый = неокрашенный), которую вы должны использовать, чтобы увидеть, что синий автомобиль желтый. Как вы думаете, что это за ответ? Или другой способ, как с помощью калькулятора (Windows) скопировать видео файлы с Youtube на ваш диск. Когда приложение использует пространство имен, его можно изменить только путем перекомпиляции или изменения с помощью некоторых инструментов IL, но не во время выполнения. Даже когда это было бы возможно (с изменением памяти), антивирусное решение, вероятно, отловило бы эту попытку изменить код работающего приложения. Это плохая идея. Запрос неверен или плохо понят
@Julo, пожалуйста, опубликуйте это как ответ, я должен проголосовать за него
Часть API отражения, которая имеет дело с типами и другими метаданными сборки, доступна только для чтения. Вы не можете изменять или влиять на значения, возвращаемые любым из таких вызовов (включая пространство имен) - они просто читают метаданные сборки.
Чтобы добиться того, о чем вы просите, вам нужно будет изменить и перекомпилировать исходный код (непосредственно или после декомпиляции IL) и переписать пространства имен перед компиляцией.
System.Type.Namespace
- это по вполне понятным причинам, свойство только для чтения (т.е. без сеттера). Я полагаю, что изменение пространств имен во время выполнения невозможно, это кажется невероятно опасным процессом (и я, честно говоря, не могу придумать вариант использования прямо сейчас)