2015-08-13 7 views
0

фонаСвязанного Const скрывается глобальным Const

Решением является веб-приложением MVC, он подключается к двум версиям того же API. Коннекторы представляют собой библиотеки классов, в которых соответствующая версия wsdl API была израсходована на прокси-класс. Веб-проект ссылается на обе библиотеки (с тем же пространством имен). Более старая, менее используемая версия сглажена, более новая версия использует глобальный псевдоним в попытке уменьшить атрибуты псевдонимов в базе кода.

Этого вопрос

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

//New v6 
    public class AgeCode 
    { 
    public const string Adult = "ADT"; 
    public const string Child = "CHD"; 
    public const string Infant = "INF"; 
    } 

    //Old v5 
    public class AgeCode 
    { 
    public const string Adult = "ADT"; 
    public const string Child = "CLD"; 
    public const string Infant = "INF"; 
    } 

    //Output of the below is "CLD" 
    var code = global::Gateways.API.AgeCode.Child 

Ситуация похожа на этот пример: http://www.davidarno.org/c-howtos/aliases-overcoming-name-conflicts-part-2-extern-alias/

Однако в моем случае оба класса будут иметь переменную «Pi».

: EDIT:

Я попытался изменить Конст declerations к 'статической ReadOnly' без успеха.

В соответствии с просьбой (Во всех случаях я изменил название API, чтобы «API»):

<Reference Include="Gateways.API.5, Version=5.0.30922, Culture=neutral, PublicKeyToken=111111111, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\Libs\Gateways.API\5\Gateways.API.dll</HintPath> 
    <Aliases>ApiV5</Aliases> 
</Reference> 
<Reference Include="Gateways.API.6, Version=6.0.31238, Culture=neutral, PublicKeyToken=222222222, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\Libs\Gateways.API\6\Gateways.API.dll</HintPath> 
    <Private>False</Private> 
</Reference> 
+0

@HenkHolterman Класс с псевдонимом не используется в классе, в котором возникает моя проблема (нет «внешнего псевдонима ...»), а другой - «использование Gateways.API». – WillDud

+1

@WillDud - оба эти класса в одном пространстве имен или в разных пространствах имен? –

+0

@ meh-uk Они оба находятся в одном пространстве имен. Мы разработали библиотеку против версии 5 API, затем они выпустили версию 6, мы обновили эту же базу кода (в ветке). Поскольку мы все общались, было довольно легко ссылаться на обе версии в одном и том же веб-проекте. Самая сложная часть - это 2 файла с таким же именем в \ bin (и эта ошибка). – WillDud

ответ

1

Фактическое решение было связано с тем, что я пропустил в описании.

Есть 3 проекта в растворе:

  • библиотека разъем Api
  • Бизнес-логика библиотека
  • Веб-сайт

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

1

Я думаю, что проблема в том, что Visual Studio/MSBuild использует первое эталонное значение, которое соответствует шаблону класса , поэтому это означает, что вы собираете первую ссылочную библиотеку (т.е. версию 5 библиотеки).

Я думаю, что если добавить псевдоним ApiV6 к новой библиотеке, как вы добавили подобный псевдоним для старой библиотеки и использовать с помощью using ApiV6::Gateways.API.AgeCode использовать новые библиотеки копию AgeCode.

+1

Возможно, вы обнаружите, что такой инструмент, как [ReSharper] (https://www.jetbrains.com/resharper/), поможет вам в этом вопросе :). –

+0

Прошу прощения, потребовалось столько времени, чтобы проверить ваше предложение. Я попробовал это, добавил ', ApiV6' в поле псевдонима в свойствах ссылки. Затем добавлен «extern alias ApiV6» в начало рассматриваемого файла, а затем обновлен с использованием «using ApiV6 :: Gateways.API». Теперь, когда я запускаю приложение при отладке, я могу навешивать объект «AgeCode» и иметь правильные члены (включая «CHD»), но когда я продвигаю выполнение после назначения переменной, переменная получает значение « CLD. Я начинаю думать, что это уникальный случай, когда он не появляется и не прослушивается. – WillDud

+1

Имеет ли [этот вопрос] (http://stackoverflow.com/questions/619104/how-to-get-the-namespace-alias-operator-to-work-under-c) помощь? –

Смежные вопросы