2012-07-20 68 views
3

我在我的VSTO项目中收到一个奇怪的错误,其中一个XAML文件在无关代码中导致生成错误。添加一个WPF命名空间会导致VSTO编译错误

这里是我做过什么

  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. 构建项目。生成失败,错误消息

    “对象”不包含“字体”的定义和没有扩展方法“字体”接受类型“对象”的第一个参数可以找到(是否缺少using指令或程序集引用?)

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

我真的被这个迷惑,因为WPF文件有没有直接关系的加载项文件。我想必须有一个链接问题?

我知道我可以只是在做显式转换(((Range)w.Rows[1]).Font.Bold = true)解决这个问题。但我并不是真的想在这个地方做到这一点。

我该如何解决这个问题,以便在我的VSTO项目中有一个WPF文件?

+0

我正在使用Visual Studio 2013,并刚刚遇到此问题。在我的情况下,如果没有这个解决方案,它会迫使我强制引用所有引用Interop的变量。所以谢谢! – 2015-06-05 18:30:59

回答

1

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

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

这似乎没有效果。 – 2012-07-23 19:32:01

0

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

不过,我能如果命名空间是不同的装配比VSTO一个定义命名空间添加到我的XAML文件。

所以这个失败,那些奇怪的转换错误每次:

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

但是这工作得很好:

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

我找到一种方式来获得此为VS2012的用户一起工作。

  1. 转到Solution Explorer - > References文件夹并选择对“Microsoft.Office.Interop.Excel”的引用。
  2. 在其属性中,将“Embed Interop Types”设置为False并进行编译。错误仍然应该出现。 现在再次设置为True并编译。瞧!

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

相关问题