Office 2016がインストールされているため、C#.NET 4.6.1 WPFプロジェクトに「Microsoft Outlook 16.0 Object Library」への参照を追加しようとしています。オブジェクトライブラリの以前のバージョンは、Officeの2016バージョンと互換性がありません。
ExcelのVBAエディターを使用している場合、「Microsoft Outlook 16.0 Object Library」がリストされ、以下に示すように_C:\Program Files\WindowsApps\Microsoft.Office.Desktop_16010.9126.2116.0_x86_8wekyb3d8bbwe\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSOUTL.OLB
_に存在します。
ただし、Visual Studioを使用すると、COMタブに「Microsoft Office 16.0 Object Library」が表示されず、_C:\Program Files\WindowsApps
_を参照しようとすると、「このフォルダーにアクセスする権限がありません」と表示されます。 「続行」をクリックして(アクセス権を取得)、「このフォルダへのアクセスを拒否されました」という結果になります。
つまり、基本的に、Office 2016のdllは、人、犬、ローカル管理者がアクセスできないフォルダに隠されているようです。
私がやろうとしているのは、開いているOutlookアプリケーションに接続し、添付ファイル付きの電子メールを送信することだけなので、おそらく別の質問は、Outlook 2016と通信するための新しい方法がありません私のGoogleathon?
また、私のバージョンのOfficeは「Windowsストアアプリケーション」としてインストールされているため、通常の[プログラムの追加と削除]リストに表示されないため、インストールの「修復」オプションが見つかりません。
ありがとう。
さらなる調査により、私が正しいことをしていることがわかりました-'Microsoft Outlook 16.0 Object Library'へのCOM参照を追加しようとすることが、Outlookをターゲットにする正しい方法になりました... https://stackoverflow.com/a/ 21018418/5040941 。
GACを確認しましたが、アセンブリが登録されていません。 [アプリと機能]の右クリックの[スタート]メニューオプションを使用して修復したのに、表示されない-Windowsストアアプリがdllを_Program Files\WindowsApps\*
_フォルダーに移動しただけで、それらをGACに登録する必要はありません。
高く評価されたコメントに答えて!
次のコードを使用する
_Outlook.Application application = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application");
_
Nuget _Microsoft.Office.Interop.Outlook
_パッケージを使用すると、System.Runtime.InteropServices.COMException: 'Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))'
例外が発生します。
[参照の追加]の[アセンブリ/拡張]タブで_Microsoft Outlook 15.0 Object Library
_または_Microsoft Outlook 14.0 Object Library
_参照を使用しようとすると、System.Runtime.InteropServices.COMException: 'Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))'
例外が発生します。
WindowsAppsフォルダーにアクセスするのが適切ではないと思います。まず、何らかの理由でロックダウンされます。これは、セキュリティのアクセス許可を調べて変更し始めた場合に問題が発生する可能性があることを示しています。言うまでもなく、最新のdllのコピーをソリューションに保持すると、プロジェクトに不必要な複雑さが追加されることは間違いありません。
次に、より重要なことに、Officeがインストールされていて、Excel Vbaから「Microsoft Outlook 16.0 Object Library」にアクセスできるのに、Visual Studioからアクセスできないのはなぜですか。
インストールがdllを適切に登録しないことで明らかにいくつかの問題があり、とにかく参照を使用可能にするために使用するいくつかのトリックがあるのはExcelだけです。
これを読んで誰かがOffice 365/2016 Windowsストアをインストールして、Visual Studioで「Microsoft Outlook 16.0 Object Library」への参照を見つけましたか?
この問題は私だけですか? Windows 10およびOffice 365を実行している私のオフィスの複数のコンピューターに影響を与えるため...
RogerNへの回答(ありがとう)については、下の画像を参照してください。Microsoft.Office.Interop.Outlookバージョン16が表示されておらず、Microsoft.Office.Coreも表示されていません。
V15ライブラリを使用しようとすると、次のエラーが発生します。
System.Runtime.InteropServices.COMException HResult=0x80040154 Message=Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). Source=mscorlib
* AND ANSWER IS *
デルから購入した2台のコンピュータは64ビットですが、32ビットのWindowsストアバージョンのMS Office 2016/365がプリインストールされています。
問題を解決するために、私は次のことをしなければなりませんでした:
Settings > Apps > Apps&Features > Microsoft Office Desktop Apps > Uninstall
_からストアアプリをアンインストールします32ビットバージョンを64ビットマシンにインストールしたいとデルが考える理由、あるいはMicrosoftの誰かがこの問題の解決策を投稿していない理由は、私の理解を超えていますが、それでもRogerNは正しかったです。私を助けるために日々を過ごしてくれた皆に感謝します。
私の以前のコメントの詳細:あなたの説明から、64ビットマシンに32ビットバージョンのMicrosoft Officeをインストールしたように思えます。 32ビットのCOMオブジェクトのみが登録されていたため、64ビットの.NETアプリケーションはそれらを見つけることができませんでした。レジストリを検索すると、0006F03A-0000-0000-C000-000000000046クラスIDがWow6432Nodeの下にのみ登録されていることがわかります。
この問題を解決するには、64ビットバージョンのOfficeをインストールするか、.NETアプリケーションでx86プラットフォームを強制的にターゲットにすることができます。