我的VSTO项目中出现了一个奇怪的错误,其中一个XAML文件导致了无关代码中的构建错误。
这就是我做的事情
创建一个新的Excel 2010加载项项目(此处名为TestAddIn)
修改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;
}
构建项目。构建应该成功。
将WPF用户控件作为新项添加到项目中。您还需要添加System.Xaml
作为项目参考。
再次构建项目。构建应该成功。
修改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>
构建项目。构建失败并显示错误消息
'object'不包含'Font'的定义,也没有扩展方法'Font'可以找到接受'object'类型的第一个参数(你是否缺少using指令或汇编引用?)
在UserControl1.xaml中删除或添加命名空间行将导致构建成功或失败。
我真的很困惑,因为WPF文件与加载项文件没有直接关系。我想一定有链接问题吗?
我意识到我可以通过显式转换(((Range)w.Rows[1]).Font.Bold = true
)来解决这个问题。但我真的不想在整个地方这样做。
如何解决这个问题,以便我可以在VSTO项目中使用WPF文件?
答案 0 :(得分:2)
我找到了一种方法让VS2012的用户能够使用它。
此错误已在VS2013(更新3)中修复。
答案 1 :(得分:1)
尝试在xmlns声明的末尾添加;assembly=
。像这样:
xmlns:Test="clr-namespace:TestAddIn;assembly="
答案 2 :(得分:1)
我也遇到了这个问题,不知道根本原因是什么。
但是,如果命名空间是在与VSTO不同的程序集中定义的,我可以为我的XAML文件添加名称空间。
所以每次都会出现这些奇怪的投射错误:
xmlns:helper="clr-namespace:MyVstoProject.Utility"
但这很好用:
xmlns:helper="clr-namespace:ReferencedProject.Utility;assembly=SomeNonVstoAssembly"