Псевдонимы более «как бы» вверху каждого файла, компилятор вставлял
using string = System.String;
using int = System.Int32;
using decimal = System.Decimal;
и т. Д.
Я не верю, что именно так компилятор реализует 1 sup> встроенных псевдонимов, но это общий эффект. Когда вы используете с использованием директив псевдонима , вам также не нужно иметь директиву 1 sup> Мой поисковик в репозитории Roslyn github подводит меня. using
для включающего их пространства имен, и это не приводит к тому, что оно включает в себя включающее пространство имен в область действия. [115 ]
Я рад, что отправил свой вопрос, хотя у меня уже было решение, потому что я получил несколько альтернативных решений. Спасибо за все Ваши ответы.
Используя другой синтаксический анализатор, такой как эмигрант или возможно, меньший (не настолько мощный, но достаточно для моих потребностей) TinyXML мог на самом деле быть хорошей идеей (и помочь портировать программу на другую операционную систему).
Используя #import
директива, по-видимому, Microsoft определенное расширение для упрощения использования COM, также интересна и принесла мне к следующей веб-странице MSXML in C++ but as elegant as in C#
, которые объясняют, как упростить использование msxml как можно больше.
Возможно, попытайтесь использовать #import
оператор.
Я использовал его в проекте VS6, у меня есть брожение вокруг, Вы делаете что-то вроде этого (в иллюстративных целях только; это работало на меня, но я не утверждаю, что был ошибочным доказательством):
#import "msxml6.dll"
...
MSXML2::IXMLDOMDocument2Ptr pdoc;
HRESULT hr = pdoc.CreateInstance(__uuidof(MSXML2::DOMDocument60));
if (!SUCCEEDED(hr)) return hr;
MSXML2::IXMLDOMDocument2Ptr pschema;
HRESULT hr = pschema.CreateInstance(__uuidof(MSXML2::DOMDocument60));
if (!SUCCEEDED(hr)) return hr;
pschema->async=VARIANT_FALSE;
VARIANT_BOOL b;
b = pschema->loadXML(_bstr_t( /* your schema XML here */ ));
MSXML2::IXMLDOMSchemaCollection2Ptr pSchemaCache;
hr = pSchemaCache.CreateInstance(__uuidof(MSXML2::XMLSchemaCache60));
if (!SUCCEEDED(hr)) return hr;
_variant_t vp=pschema.GetInterfacePtr();
pSchemaCache->add(_bstr_t( /* your namespace here */ ),vp);
pdoc->async=VARIANT_FALSE;
pdoc->schemas = pSchemaCache.GetInterfacePtr();
pdoc->validateOnParse=VARIANT_TRUE;
if (how == e_filename)
b = pdoc->load(v);
else
b = pdoc->loadXML(bxmldoc);
pXMLError = pdoc->parseError;
if (pXMLError->errorCode != 0)
return E_FAIL; // an unhelpful return code, sigh....
Другая опция была бы для использования другого синтаксического анализатора XML, который уже сделан, такие как эмигрант. Это избегает необходимости использовать ATL и сложности COM, и является путем, легче, чем реализация Вашего собственного. Я предлагаю это только becasue, Вы заявили, что причина, Вы смотрите на msxml, состоит в том, потому что Вы не хотите реализовывать свой собственный синтаксический анализатор.
Почему Вы не используете некоторую обертку MSXML, которая экранировала бы Вас, формируют COM, такой как кофе "арабика"?
Можно использовать TinyXML. Это - открытый исходный код и больше по независимому от платформы.