Экспорт двух слегка отличающихся пространств имен из одной управляемой оболочки CLI / C ++ - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть собственная библиотека C ++, для которой я создал управляемую оболочку в CLI / C ++.Это работало хорошо, пока я не решил расширить его дополнительными подпространствами имен.Новое пространство имен не видно из моего проекта C # .NET.Вот похожая структура:

namespace A
{
    namespace B
    {
        public ref class X {...};
        public ref class Y {...};
        public ref class Z {...};
    }
}
namespace A
{
    namespace C
    {
        public ref class X {...};
        public ref class Y {...};
        public ref class Z {...};
    }
}

Когда я импортирую его в проект C # .NET, в браузере объектов я могу видеть как пространства имен AB, так и AC, но intellisense, а также компилятор говорит мне, что неттакое пространство имен, как «A.C».

Я попытался переименовать пространства имен и обнаружил, что любое пространство имен было переименовано последним, оно стало видимым, а другое стало невидимым.Как будто я переименовал AC в AD, и внезапно я смог получить доступ к AD, но больше не к AB.Затем я переименовал AB в AE, и внезапно AE стал видимым, а AD невидимым.

Что я делаю не так?

Обновление: Я удалил все выражения "using"из кода CLI / C ++ и разрешил необходимые зависимости локально (например, System :: String и т. д.), потому что я подозревал, что, возможно, способ, которым я использовал другие пространства имен, мог вызвать мои проблемы.Ответ - нет.У меня все еще есть та же проблема.

Обновление 2: Я дал себе ответ, потому что думал, что мне удалось решить эту проблему, но я удалил его в конце.Я думаю, что часть проблемы заключается в том, что я организовал вложенные пространства имен в подпапки, в которых имена файлов были точно такими же, поэтому компилятор учитывал только одно имя файла один раз.Я думаю, что рабочее решение было бы, если бы я объявил и определил оба вложенных пространства имен в тех же заголовочных и cpp-файлах, рядом друг с другом.Я попробую это позже.

...