我在 Word 插件中使用 Microsoft.Bcl.Async,我的插件被编译为 exe (test_addin.exe) 文件,该文件从 Microsoft Word 作为程序集加载,当我直接启动可执行文件时,一切正常,但是当我从 Word 运行它时,我收到一条错误消息,指出它无法加载系统.线程.任务集会。
Could not load file or assembly System.Threading.Tasks...
看起来它与绑定重定向有关,当我尝试从 Word 运行应用程序时,它期望配置文件位于'C:\Program Files (x86)\Microsoft Office\Office15'
文件夹并命名WINWORD.exe.config
,不幸的是这是不可能的,因为我可能无权访问该文件夹。
我的 test_addin.exe.config 文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.6.9.0" newVersion="2.6.9.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.6.9.0" newVersion="2.6.9.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
我尝试过设置AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
指向正确的路径,但似乎没有帮助,是否有其他方法使其适用于 Office 加载项?
我通过实现自定义 AssemblyResolve 处理程序解决了这个问题
Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs e)
{
try
{
if (!e.Name.ToLower().StartsWith("system.threading.tasks"))
return null;
AddoDebug.Instance.WriteLine("Assembly_Resolve");
var assemblyDetail = e.Name.Split(',');
var assemblyBasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var assembly = Assembly.LoadFrom(assemblyBasePath + @"\" + assemblyDetail[0] + ".dll");
return assembly;
}
catch (Exception ex)
{
AddoDebug.Instance.WriteLine("An exception occurred: " + ex, ADDOTraceStatus.Exception);
return null;
}
}
但我不确定这是否是一个好的解决方案,所以我将这个问题留给新的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)