我有一个现有的WPF应用程序,我想从中创建一个VisualStudio扩展。
基本上,我有一个xaml窗口,我在其中使用扩展名为.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">
“方法或操作未实施。”
修改
似乎在GAC中注册所有AvalonDock dll修复了这个问题,但显然,这不是一个可接受的解决方案......
我猜这些dll在作为扩展程序运行时没有正确注册,我可能需要以特定方式引用它们...现在,它们在Extension的csproj + CopyLocal = True
中被引用EDIT2
添加了源代码以重现问题https://github.com/MrLuje/VSPackage_NotWorking
有两个项目:
答案 0 :(得分:3)
我找到了一个更简单的解决方案,&#39; ProvideBindingPath&#39;这会将您当前的扩展文件夹添加到dll的解析文件夹中。
[ProvideBindingPath]
public sealed class MainWindowPackage : Package
{
}
基于以下问题的解决方案:VSIX - Cannot load file or assembly of a referenced dll
添加到gac的解决方案不会工作&#39; ... VSIX扩展不允许在gac上注册,也许解决方法将运行gacutil。
答案 1 :(得分:0)
跟随@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);
}
}