2015-05-03 5 views
2

У меня есть существующее приложение WPF, из которого я хотел бы сделать расширение VisualStudio.XamlParseException с использованием Extended.Wpf.Toolkit в проекте расширения VS

В принципе, у меня есть окно xaml, в котором я использую библиотеку Extended.Wpf.Toolkit для AvalonDock. Это приложение отлично работает без каких-либо проблем.

Я попытался повторно использовать то же самое окно в моем проекте расширения и я получил XamlParseException от нагрузки

Вот пример кода, который не удается:

<Window x:Class="Company.VisualStudioExtension.Window2" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:xcad="http://schemas.xceed.com/wpf/xaml/avalondock" 
    Title="Window2" Height="300" Width="300"> 
<Grid> 
    <xcad:DockingManager AllowMixedOrientation="True" BorderThickness="1"> 
     <xcad:DockingManager.DocumentHeaderTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="Test" /> 
       </StackPanel> 
      </DataTemplate> 
     </xcad:DockingManager.DocumentHeaderTemplate> 
     <xcad:LayoutRoot x:Name="_layoutRoot"> 
      <xcad:LayoutPanel Orientation="Horizontal"> 
       <xcad:LayoutAnchorablePane DockWidth="300"> 
       </xcad:LayoutAnchorablePane> 
      </xcad:LayoutPanel> 
     </xcad:LayoutRoot> 
    </xcad:DockingManager> 
</Grid> 

подсвечивается Исключение по следующей строке:

  <xcad:LayoutPanel Orientation="Horizontal"> 

"Метод или операция не реализовано ».

EDIT

Кажется регистрация всех AvalonDock DLL в GAC устраняет проблему, но, очевидно, это не является приемлемым решением ...

Я думаю, эти дллы не должным образом зарегистрированы во время работы в качестве расширения Я Propably нужно ссылаться на них определенным образом ... на данный момент, они упоминаются в csproj внутреннего абонента + CopyLocal = True

EDIT2

Добавлен исходный код, чтобы воспроизвести проблему https://github.com/MrLuje/VSPackage_NotWorking

Есть 2 проекта:

  • приложение WPF с рабочим кодом в MainWindow
  • удлинительный VS с нерабочим кода в window1 (в отладочных , вам нужно нажать в меню Сервис> «Мое имя команды»)
+0

Похоже, LayoutPanel ориентирован на ориентацию. Вам нужно установить ориентацию? Если нет, удалите его и перейдите. Если да, [править] и добавлять сведения. – Will

+0

Мне они не нужны, но проблема все еще сохраняется, в той же строке – MrLuje

+0

Вам нужно зафиксировать детали исключения, чтобы сообщить, какой метод не реализован. – Will

ответ

2

Я нашел более легкое решение, «ProvideBindingPath», это добавит вашу текущую папку расширения в папки разрешения DLL.

[ProvideBindingPath] 
public sealed class MainWindowPackage : Package 
{ 
} 

на основе решения предназначены в: VSIX - Cannot load file or assembly of a referenced dll

Решение добавления в GAC не будут работать «как есть» ... VSIX расширения DonT позволяют зарегистрировать на GAC, возможно, обходной путь будет выполняться gacutil ,

+1

Да, отлично работает Гораздо чище, чем установка GAC! – MrLuje

+0

Спасибо! Это работает. Как ты это понял? 'ProvideBindingPath' буквально не имеет никакой документации. – MgSam

0

Далее следуют @ ответ Уилла и пошел на следующий код, который работает отлично:

protected override void Initialize() 
{ 
    base.Initialize(); 

    InstallAvalonToGac(); 
} 

private static void InstallAvalonToGac() 
{ 
    var dlls = new string[] 
    { 
     "Xceed.Wpf.AvalonDock.dll", 
     "Xceed.Wpf.DataGrid.dll", 
     "Xceed.Wpf.Toolkit.dll" 
    }; 

    foreach (var dll in dlls) 
    { 
     var fullpath = Path.Combine(Environment.CurrentDirectory, dll); 
     new System.EnterpriseServices.Internal.Publish().GacInstall(fullpath); 
    } 
}