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 个项目:
- 在 MainWindow 中具有工作代码的 WPF 应用程序
- Window1 中带有非工作代码的 VS 扩展(在调试中,您需要单击“工具”> "My Command name")
遵循@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。
我有一个现有的 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 个项目:
- 在 MainWindow 中具有工作代码的 WPF 应用程序
- Window1 中带有非工作代码的 VS 扩展(在调试中,您需要单击“工具”> "My Command name")
遵循@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。