Microsoft プロジェクトの VSTO を使用してアドインを開発しており、管理されていない c++ dll をラップする管理された c++ dll があります。64 ビット用と 32 ビット用の 2 つのバージョンのマネージ C++ DLL を展開する必要があります。Assembly.LoadFrom(path) を使用して、実行している Office のバージョンに応じて適切な dll をロードしています。これはすべて、64 ビット オフィスを実行している 64 ビット マシンである私の開発マシンで正常に動作するようです。以下は問題のコードです:
try
{
//This will return true so I know the file exists
bool fileExists = File.Exists(path);
//This will throw a file not found exception
keyModAssembly = Assembly.LoadFrom(path);
}
catch (FileNotFoundException e)
{
}
パスを 3 回確認しましたが、ファイルは存在し、正しい 32 ビット dll です。これはすべて私の 64 ビット マシンでは正常に動作しますが、32 ビット バージョンでテストしようとすると、xpmode で失敗します。
どんな提案でも大歓迎です。
前もって感謝します。
編集
管理されていない dll が見つからない可能性があるという Phillip の提案に応えて、LoadLibraryW(path) を使用して管理されていない dll をスコープにロードしています。
// this is not throwing an exception so I know the unmanaged dll is there.
if (!File.Exists(unmanagedPath))
throw new FileNotFoundException();
LoadLibraryW(unmangedlibPath);