Проблема с повторяющимися именами пространства имен - PullRequest
0 голосов
/ 26 января 2011

У меня есть класс с именем AppVisum.Membership.Views.AppVisum.Membership.Controllers.Membership._Page_Views_AppVisum_Membership_Controllers_Membership_Validate_cshtml. Да, я знаю, что это смешно, но я скорее думаю, что оно должно называться так, а что касается пространств имен, они не нужны, но класс генерируется инструментом, а папка должна называться AppVisum.Membership.Controllers.Membership, поэтому Я не знаю, смогу ли я изменить пространства имен. Тем не менее, отвратительные имена - не настоящая проблема, главная проблема - добраться до класса AppVisum.Sys.AppSys. Ide говорит мне, что не может найти AppVisum.Membership.Views.AppVisum.Sys.AppSys, так как я могу сказать, что мне нужен root?

[редактировать]

Извините, я не был достаточно конкретен, так как думал, что решить эту проблему будет просто. Global :: сработала бы отлично, если бы это был обычный файл .cs, однако это бритвенный файл, а бритва не совсем похожа на @using global::AppVisum.Sys (это просто переводит на использование global, которое не делает никаких смысл). Я нашел 2 возможных решения, первое - просто изменить правило поиска файлов для поиска папок с _ вместо .. Тогда я получу пути вроде AppVisum.Membership.Views.AppVisum_Membership_Controllers_Membership._Page_Views_AppVisum_Membership_Controllers_Membership_Validate_cshtml. Это, вероятно, сработало бы просто отлично, и если кто-то не придумает лучшей альтернативы, я думаю, что я иду на это. Другой вариант - переписать пользовательский инструмент, который генерирует классы (он с открытым исходным кодом, поэтому я думаю, что я смогу сделать это слишком просто). Надеюсь, что все проясняет.

Ответы [ 4 ]

2 голосов
/ 26 января 2011

Добавьте префикс global:: в пространство имен.

1 голос
/ 26 января 2011

Как SLaks упоминает в комментарии, вы должны в основном исправить пространство имен по умолчанию вашего проекта - либо это, либо избегать создания иерархии папок. Вы пометили этот вопрос на C #, но действительно ли ваш сгенерированный код на VB? В то время как компилятор VB добавляет пространство имен проекта при компиляции, я не верю, что компилятор C # делает, поэтому я удивлен, что вы получаете это пространство имен, если честно.

Я не согласен с вашим утверждением, что «отвратительные имена - это не настоящая проблема» - я бы сказал, что - это настоящая проблема, и затруднить доступ к определенному пространству имен - это одна последствия проблемы. Исправьте реальную проблему (плохие пространства имен), а остальные исчезнут. Использование global:: и т. Д. - это просто обходной путь, который вам нужно применять повсюду. Было бы лучше разобраться с этим раз и навсегда.

В основном, если вы расскажете нам больше о том, как вы попали в эту ситуацию, мы с большей вероятностью сможем помочь вам выбраться из нее.

1 голос
/ 26 января 2011

try:

using Sys = AppVisum.Sys;

или:

using AppSys = AppVisum.Sys.AppSys;

По сути, вы можете уменьшить неоднозначность путем наложения типов и пространств имен в ваших директивах using.(И псевдонимы не обязательно должны совпадать с именами типов / пространств имен, они просто есть в моих примерах.)

0 голосов
/ 26 января 2011

возможно, вы можете упростить добавление псевдонима:

using AV = AppVisum.Membership.Views.AppVisum;

и в коде:

var s = new AV.Sys.AppSys();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...