c# - Autofac 无法解析 Microsoft.Office.Interop.Word.Application
问题描述
下面的应用程序在我们的开发/QA 团队机器上成功运行:
using Autofac;
using Word = Microsoft.Office.Interop.Word;
namespace ComObjectIssue
{
public interface IDateWriter
{
void WriteDate();
}
public class TodayWriter : IDateWriter
{
private readonly Word.Application wordApp;
public TodayWriter(Word.Application wordApp)
{
this.wordApp = wordApp;
}
public void WriteDate()
{
//...
}
}
public class Program
{
private static IContainer Container { get; set; }
static void Main(string[] args)
{
var builder = new ContainerBuilder();
var wordApp = new Word.Application();
builder.RegisterInstance(wordApp).SingleInstance();
builder.RegisterType<TodayWriter>().As<IDateWriter>();
Container = builder.Build(); // throws "System.ArgumentException: The type 'System.__ComObject' is not assignable to service 'Microsoft.Office.Interop.Word.Application'."
using (var scope = Container.BeginLifetimeScope())
{
var writer = scope.Resolve<IDateWriter>();
writer.WriteDate();
}
wordApp.Quit();
}
}
}
但不适用于我们的一位客户——Autofac 在创建容器时抛出以下异常:
System.ArgumentException: The type 'System.__ComObject' is not assignable to service 'Microsoft.Office.Interop.Word.Application'.
at Autofac.Builder.RegistrationBuilder.CreateRegistration(Guid id, RegistrationData data, IInstanceActivator activator, IResolvePipelineBuilder pipelineBuilder, Service[] services, IComponentRegistration target)
at Autofac.Builder.RegistrationBuilder.CreateRegistration[TLimit,TActivatorData,TSingleRegistrationStyle](IRegistrationBuilder`3 builder)
at Autofac.Builder.RegistrationBuilder.RegisterSingleComponent[TLimit,TActivatorData,TSingleRegistrationStyle](IComponentRegistryBuilder cr, IRegistrationBuilder`3 builder)
at Autofac.ContainerBuilder.Build(IComponentRegistryBuilder componentRegistry, Boolean excludeDefaultModules)
at Autofac.ContainerBuilder.Build(ContainerBuildOptions options)
重新安装Microsoft Visual Studio 2010 Tools for Office Runtime
没有帮助。
- Autofac版本:6.2.0.0
- 目标:.NET Framework 4.8
是否知道会发生什么或应该检查什么?
更新
MS Word 版本:16.0
今天我们能够通过以管理员身份运行 MS Word 来解决这个问题。不幸的是,这种解决方案不适用,因为客户端的安全策略不允许使用管理员权限。
我无法在我这边复制它 - 它适用于非管理员帐户。看起来需要一些特定的许可,但是什么?
解决方案
推荐阅读
- angular - 在 mat-select 内显示一个 mat-icon 并使用 mat-select-trigger 将两者都显示为选中状态
- node.js - 打开 MacOS 终端窗口并执行命令
- c - 内置的 C 应用程序在它内置的文件夹内工作,当被带到它外面时失败
- azure - Spring Boot 2.0 启动 spring-cloud 和 azure-spring-boot 需要很长时间
- javascript - HTML 更改导致 Javascript 意外标记“!”
- python - Snapchat 广告 api - api 调用的日期时间和时区由于时区更改而导致失败
- java - @beforetest testng 由于某种原因它被忽略了
- excel - 如何在VBA中定义具有N个元素的数组的长度(元素数)
- c++ - 在可变参数模板函数中使用模板类的可变参数模板方法
- magento - 如何在 Magento 2.3.2 结帐页面中翻译面包屑?