关于从另一个程序集中提取引用

时间:2019-04-16 01:50:51

标签: c# .net wpf xaml

我正在尝试构建一个可在项目之间重用的库,但可悲的是,并非所有来自该库的引用都被“拉到”引用该库的应用程序项目中……希望我能明白。

让我解释一下。我以较小的规模重现了问题,这是设置。我有一个Visual Studio解决方案,其中包含2个项目:

  • SomeLib(.net框架类库)
  • TestApp(wpf应用程序)

TestApp引用SomeLib。 我在SomeLib中添加了2个nuget(和依赖项):

  • SharpDX.Direct2D
  • Xceed.Wpf.Toolkit

SomeLib包含此类:

    public class TestMe
    {
        public TestMe()
        {
            SharpDX.Direct2D1.AntialiasMode thing = SharpDX.Direct2D1.AntialiasMode.Aliased;//use sharpdx for ... something.
        }
    }

...以及此WPF用户控件:

<UserControl x:Class="SomeLib.TestView"
    ...
    xmlns:xtk="http://schemas.xceed.com/wpf/xaml/toolkit"
    xmlns:xad="http://schemas.xceed.com/wpf/xaml/avalondock">
    <Grid>
        <xad:DockingManager>
            <xad:DockingManager.Theme>
                <xad:VS2010Theme />
            </xad:DockingManager.Theme>
            <xad:LayoutRoot>
            </xad:LayoutRoot>
        </xad:DockingManager>
    </Grid>
</UserControl>

TestApp的MainWindow使用此xaml:

<Window
    ...
    xmlns:SomeLib="clr-namespace:SomeLib;assembly=SomeLib" x:Class="TestApp.MainWindow">
    <Grid>
        <SomeLib:TestView/>
    </Grid>
</Window>

...以及此代码:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.Loaded += MainWindow_Loaded;
        }
        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            SomeLib.TestMe thing = new SomeLib.TestMe();
        }
    }

现在,在构建之后,我检查输出文件夹,并注意到SharpDX组件被“拉”到了那里,但没有Xceed组件。

有趣的是,使用Visual Studio设计器在视图和窗口上,我看到AvalonDock在那里实例化了,没有任何错误。

运行时,出现以下错误:System.Windows.Markup.XamlParseException:'无法加载文件或程序集'Xceed.Wpf.AvalonDock

...当然。

现在我想念什么?为什么将SharpDX程序集正确“拉”到子项目而不是Xceed程序?

编辑: 感谢Zinov;使用包含在Cce代码中的Xceed引用 中的任何对象都可以工作,并且可以使子项目的输出文件中包含dll。因此,现在的问题是,有没有办法从XAML做到这一点?

0 个答案:

没有答案