Я пытаюсь добавить цвет к выходным данным сборки Visual Studio. Итак, я пытаюсь получить классификатор IClassifierProvider. Но GetClassifier () не вызывается. В чем может быть проблема? Пример исходного кода приведен ниже. Когда я пытаюсь использовать расширение VSColorOutput, оно запускается. Скажите, пожалуйста, что мне не хватает?

 [ContentType("output")]
[Export(typeof(IClassifierProvider))]
public class OutputClassifierProvider : IClassifierProvider
{
    [Import]
    internal IClassificationTypeRegistryService ClassificationRegistry;

    [Import]
    internal SVsServiceProvider ServiceProvider;

    public static OutputClassifier OutputClassifier { get; private set; }

    public IClassifier GetClassifier(ITextBuffer buffer)
    {
        MessageBox.Show("asd");
        try
        {
            if (OutputClassifier == null)
            {
                OutputClassifier = new OutputClassifier();

            }
        }
        catch (Exception ex)
        {                
            throw;
        }
        return OutputClassifier;
    }
}
public class OutputClassifier: IClassifier
{
    public event EventHandler<ClassificationChangedEventArgs> ClassificationChanged;

    public IList<ClassificationSpan> GetClassificationSpans(SnapshotSpan span)
    {
            return new List<ClassificationSpan>();
    }
}

Vsix манифест

<?xml version="1.0" encoding="utf-8"?>
<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
  <Identifier Id="3ac9d6e9-a3dc-4a27-a048-f4bb7fe5889b">
    <Name>Sample</Name>
    <Author>Company</Author>
    <Version>1.0</Version>
    <Description xml:space="preserve">It conatains set of features which will ease the life of Atmel Studio user.</Description>
    <Locale>1033</Locale>
    <InstalledByMsi>false</InstalledByMsi>
    <SupportedProducts>      
      <VisualStudio Version="10.0">
        <Edition>Pro</Edition>
      </VisualStudio>
    </SupportedProducts>
    <SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.0" />
  </Identifier>
  <References>
    <Reference Id="Microsoft.VisualStudio.MPF" MinVersion="10.0">
      <Name>Visual Studio MPF</Name>
    </Reference>
  </References>

  <Content>
    <VsPackage>XFeatures.pkgdef</VsPackage>
  </Content>
</Vsix>
3
gramcha 29 Май 2013 в 18:22
Чтобы исключить некоторые моменты, включите также свой .vsixmanifest.
 – 
Jason Malinowski
29 Май 2013 в 19:55
Я добавил содержимое манифеста.
 – 
gramcha
30 Май 2013 в 09:36

1 ответ

Лучший ответ

Спасибо, Джейсон Малиновски. Я проанализировал код манифеста и обнаружил, что там отсутствует контент MEF. После добавления MEF в тег содержимого он теперь работает.

 <Content>
    <VsPackage>|%CurrentProject%;PkgdefProjectOutputGroup|</VsPackage>
    <MefComponent>|%CurrentProject%|</MefComponent>
  </Content>
4
gramcha 3 Июн 2013 в 10:11
С какого шаблона вы начали?
 – 
Jason Malinowski
31 Май 2013 в 01:17
Храмат это VSPackage.
 – 
gramcha
3 Июн 2013 в 10:03
Если бы вы начинали с нового проекта, проект Editor Classifier был бы лучшим шаблоном для начала. Но если вы добавляли это в существующий проект VSPackage, то, к сожалению, нет простого способа добавить его.
 – 
Jason Malinowski
3 Июн 2013 в 22:26
Ага. Я добавляю это в существующий пакет. Но работает исправно. Спасибо за вашу помощь.
 – 
gramcha
5 Июн 2013 в 12:08