4

VSTOプロジェクトで奇妙なエラーが発生し、XAMLファイルが無関係のコードでビルドエラーを引き起こしています。

これが私がしたことです

  1. 新しいExcel2010アドインプロジェクト(ここでは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ファイルを含めることができるようにこれを修正するにはどうすればよいですか?

4

3 に答える 3

2

VS2012 のユーザーがこれを機能させる方法を見つけました。

  1. ソリューション エクスプローラー -> 参照フォルダーに移動し、"Microsoft.Office.Interop.Excel" への参照を選択します。
  2. そのプロパティ内で、"Embed Interop Types" を False に設定してコンパイルします。エラーは引き続き表示されるはずです。ここで、再度 True に設定してコンパイルします。ほら!

このバグは VS2013 (Update 3) で修正されました。

于 2014-08-13T14:48:11.730 に答える
1

私もこの問題に遭遇し、根本的な原因が何であるかわかりません。

ただし、名前空間がVSTOアセンブリとは異なるアセンブリで定義されている場合は、XAMLファイルに名前空間を追加できます。

したがって、これは毎回これらの奇妙なキャストエラーで失敗します:

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

しかし、これは正常に機能します。

xmlns:helper="clr-namespace:ReferencedProject.Utility;assembly=SomeNonVstoAssembly"
于 2012-11-09T17:38:13.967 に答える
1

;assembly=xmlns 宣言の最後に追加してみてください。そのようです:

xmlns:Test="clr-namespace:TestAddIn;assembly="
于 2012-07-23T18:55:16.183 に答える