使用Telerik组件正确部署应用程序

时间:2015-10-27 19:10:16

标签: c# .net wpf telerik

我有以下项目结构:

  • ClassLibrary
    • 参考Telerik Controls
  • 主机应用程序
    • 引用ClassLibrary

类库中有几个usercontrols,其中包含telerik组件。我有一个宿主应用程序,它从类库中托管这些用户控件。

现在问题是,尽管参考了库中的telerik dll,我仍然需要在我的宿主应用程序中引用telerik dll。否则它会在运行时抛出XamlParseException。它编译时没有错误。

  

类型的第一次机会异常   ' System.Windows.Markup.XamlParseException'发生在   PresentationFramework.dll

     

其他信息:无法加载文件或程序集   ' Telerik.Windows.Controls.GridView,PublicKeyToken = 5803cfa389c90ce7'   或其中一个依赖项。系统找不到指定的文件。

为什么会这样?为什么需要重复dll。

我正在使用版本为2015.2.623.45

的Telerik dll

要重现此问题: 我们可以用一个usercontrol创建一个库

<UserControl>
       <Grid>
          <telerik:RadGridView></telerik:RadGridView>  
       </Grid>
 </UserControl>

然后创建另一个引用此类库的项目

<Window>
    <Grid>
        <wpfApplication1:UserControl1/>
    </Grid>
</Window>

尝试运行它。

(为简洁起见,我省略了xmlns定义)

2 个答案:

答案 0 :(得分:5)

取自以下解决方案:

DLL reference not copying into project bin

A)添加对主机应用程序的引用

B)添加类库的虚拟代码,以便编译器检测到 正在使用引用,然后将其复制到Host Application Bin文件夹中。

C)添加构建事件以强制复制DLL。

只是让XAML代码不够的原因是编译器没有评估它以查看你的XAML所依赖的DLL。

我现在选择B,但我倾向于选择A)是最佳实践。

如果您在某个时刻开始在C#中操作telerik控件,一切都将按预期开始工作。

答案 1 :(得分:0)

在实际使用DLL的项目文件中,将其添加到<PropertyGroup>部分:

<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>

现在,DLL将被复制到该项目以及所有引用项目的输出文件夹中。