Как получить ссылку на IStereotype в шаблоне T4?
-
23-09-2019 - |
Вопрос
Есть ли способ получить ссылку на интерфейс Microsoft.VisualStudio.Uml.Profiles.IStereotype в шаблоне t4?Я имею в виду IStereotype, который хранит определение стереотипа UML, а не IStereotypeInstance, который содержит фактическое значение.Я попробовал что-то подобное, но перечисление ApplicableStereotypes пусто.
void WriteClassAttributes( IClass classItem )
{
foreach( IStereotypeInstance stereoInst in classItem.AppliedStereotypes )
{
this.WriteLine( string.Format( "{0} = {1}", stereoInst.Profile, stereoInst.Name ) );
}
foreach( IStereotype stereo in classItem.ApplicableStereotypes )
{
this.WriteLine( string.Format( "{0} = {1}", stereo.Profile.Name, stereo.Name ) );
}
}
Я пытался получить IStereotype из ModelStore.Но свойство ProfileManager всегда возвращает значение null, и код прерывается.
string GetDefaultValue( IStereotypePropertyInstance stereoProp )
{
IModelStore modelStore = stereoProp.GetModelStore();
Microsoft.VisualStudio.Uml.Profiles.IProfile profile =
modelStore.ProfileManager.GetProfileByName( profileName );
foreach( IStereotype stereo in profile.Stereotypes )
{
if( stereo.Name == stereoProp.StereotypeInstance.Name )
{
return stereo.DefaultValue;
}
}
}
Я застрял.Пожалуйста помоги!
Решение
Я не очень рад ответить на свой вопрос, но факт в том, что описанное поведение "по дизайну".Я запускал код в хранилище моделей, загруженном во внешнюю библиотеку классов, используя
IModelingProjectReader project = ModelingProject.LoadReadOnly( projectPath )
Код отлично работает при запуске из надстройки VS, имеющей доступ к применяемому профилю, а также загружает соответствующие стереотипы.