【问题标题】:Adding a WPF namespace causes VSTO compile error添加 WPF 命名空间会导致 VSTO 编译错误
【发布时间】:2012-07-19 23:14:26
【问题描述】:

我在 VSTO 项目中遇到一个奇怪的错误,其中 XAML 文件导致无关代码中的构建错误。

这就是我所做的

  1. 创建一个新的 Excel 2010 插件项目(此处命名为 TestAddIn)

  2. 修改ThisAddIn_Startup阅读

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Worksheet w = Globals.ThisAddIn.Application.Workbooks[1].Sheets[1];
        w.Rows[1].Font.Bold = true;
    }
    
  3. 构建项目。构建应该会成功。

  4. 将 WPF 用户控件作为新项添加到项目中。您还需要添加 System.Xaml 作为项目参考。

  5. 再次构建项目。构建应该会成功。

  6. 修改 UserControl1.xaml 以读取

    <UserControl x:Class="TestAddIn.UserControl1"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:Test="clr-namespace:TestAddIn" <!-- Add this line -->
                 >
        <Grid>
    
        </Grid>
    </UserControl>
    
  7. 构建项目。构建失败并显示错误消息

    “object”不包含“Font”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“Font”(您是否缺少 using 指令或程序集引用?)

在 UserControl1.xaml 中删除或添加命名空间行将导致构建成功或失败。

我对此感到非常困惑,因为 WPF 文件与加载项文件没有直接关系。我想肯定是链接问题?

我意识到我可以通过显式强制转换 (((Range)w.Rows[1]).Font.Bold = true) 来解决这个问题。但我真的不想到处这样做。

如何解决此问题,以便在我的 VSTO 项目中拥有 WPF 文件?

【问题讨论】:

  • 我正在使用 Visual Studio 2013,刚刚遇到了这个问题。就我而言,如果没有这个解决方案,它会迫使我硬转换所有引用互操作的变量。所以谢谢你!

标签: c# wpf xaml namespaces vsto


【解决方案1】:

我找到了一种方法可以让 VS2012 的用户使用它。

  1. 转到解决方案资源管理器 -> 引用文件夹并选择对“Microsoft.Office.Interop.Excel”的引用。
  2. 在其属性中,将“嵌入互操作类型”设置为 False 并编译。错误应该仍然出现。 现在再次将其设置回 True 并编译。瞧!

此错误已在 VS2013(更新 3)中修复。

【讨论】:

    【解决方案2】:

    尝试在 xmlns 声明的末尾添加;assembly=。像这样:

    xmlns:Test="clr-namespace:TestAddIn;assembly="
    

    【讨论】:

    • 这个好像没有效果。
    【解决方案3】:

    我也遇到了这个问题,不知道根本原因是什么。

    但是,如果命名空间是在与 VSTO 不同的程序集中定义的,我可以将命名空间添加到我的 XAML 文件中。

    所以每次都会出现这些奇怪的转换错误:

    xmlns:helper="clr-namespace:MyVstoProject.Utility"
    

    但这很好用:

    xmlns:helper="clr-namespace:ReferencedProject.Utility;assembly=SomeNonVstoAssembly"
    

    【讨论】:

      猜你喜欢
      • 2016-09-01
      • 2011-08-26
      • 2011-12-24
      • 2016-02-04
      • 2021-12-11
      • 2017-12-16
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多