2012-07-20 62 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)中修復。

相關問題