XamlParseException 在 VS 扩展项目中使用 Extended.Wpf.Toolkit

XamlParseException using Extended.Wpf.Toolkit in VS extension project

我有一个现有的 WPF 应用程序,我想从中创建一个 VisualStudio 扩展。

基本上,我有一个 xaml window,我在其中使用 AvalonDock 的库 Extended.Wpf.Toolkit。此应用程序完美运行,没有任何问题。

我试图在我的扩展项目中重新使用相同的 window,但我在加载时遇到了 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">

"The method or operation is not implemented."

编辑

似乎在 GAC 中注册所有 AvalonDock dll 可以解决问题,但显然,这不是一个可接受的解决方案...

我想这些 dll 没有正确注册,而 运行 作为扩展,我可能需要以特定方式引用它们...目前,它们在扩展的 csproj + CopyLocal=True

EDIT2

添加了重现问题的源代码https://github.com/MrLuje/VSPackage_NotWorking

有 2 个项目:

遵循@Will 的回答并使用以下代码运行良好:

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);
    }
}

我找到了一个更简单的解决方案,'ProvideBindingPath'这会将您当前的扩展文件夹添加到 dll 的解析文件夹中。

 [ProvideBindingPath]
 public sealed class MainWindowPackage : Package
 {
 }

基于以下目的的解决方案:VSIX - Cannot load file or assembly of a referenced dll

添加到 gac 的解决方案不起作用 'as is'...VSIX 扩展不允许在 gac 上注册,也许解决方法是 运行 gacutil。