在运行时加载 Interop.Word.dll
Loading Interop.Word.dll during runtime
我目前正在开发一个小型控制台应用程序,它应该与 Microsoft Word 有某种集成。我猜用户可能有不同版本的 Microsoft Office,这就是为什么我决定在运行时加载互操作组件(但我不确定这是正确的决定)。
下一段代码抛出异常System.ArgumentNullException Value cannot be null. Arg_ParamName_Name
。据我了解,问题是 WordInterop.GetType("Application")
returns 为空,但我不明白为什么。
class Program
{
static void Main(string[] args)
{
Assembly WordInterop = Assembly.LoadFrom("C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Word\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Word.dll");
Assembly Office = Assembly.LoadFrom("C:\Windows\assembly\GAC_MSIL\office\15.0.0.0__71e9bce111e9429c\OFFICE.DLL");
Type WordApp = WordInterop.GetType("Application");
dynamic wordAppInst = Activator.CreateInstance(WordApp);
wordAppInst.Visible = true;
}
}
以下应该有效:
var wordAppType = Type.GetTypeFromProgID("Word.Application")
var wordAppInst = Activator.CreateInstance(wordAppType);
我发现问题出在类型名称上。
应该是 Microsoft.Office.Interop.Word.ApplicationClass
而不是 Application
.
我目前正在开发一个小型控制台应用程序,它应该与 Microsoft Word 有某种集成。我猜用户可能有不同版本的 Microsoft Office,这就是为什么我决定在运行时加载互操作组件(但我不确定这是正确的决定)。
下一段代码抛出异常System.ArgumentNullException Value cannot be null. Arg_ParamName_Name
。据我了解,问题是 WordInterop.GetType("Application")
returns 为空,但我不明白为什么。
class Program
{
static void Main(string[] args)
{
Assembly WordInterop = Assembly.LoadFrom("C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Word\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Word.dll");
Assembly Office = Assembly.LoadFrom("C:\Windows\assembly\GAC_MSIL\office\15.0.0.0__71e9bce111e9429c\OFFICE.DLL");
Type WordApp = WordInterop.GetType("Application");
dynamic wordAppInst = Activator.CreateInstance(WordApp);
wordAppInst.Visible = true;
}
}
以下应该有效:
var wordAppType = Type.GetTypeFromProgID("Word.Application")
var wordAppInst = Activator.CreateInstance(wordAppType);
我发现问题出在类型名称上。
应该是 Microsoft.Office.Interop.Word.ApplicationClass
而不是 Application
.