2014-09-04 29 views
5

Word eklentimde Microsoft.Bcl.Async kullanıyorum, eklentim, Microsoft Word'den derleme olarak yüklenmiş bir exe (test_addin.exe) dosyası olarak derlendi, Doğrudan yürütülebilir dosyayı başlattığımda, her şey iyi çalışıyor, ancak Word'den çalıştırdığımda, Systems.Threading.Tasks derlemesini yüklemediğini belirten bir hata alıyorum.Bağdaştırıcı yönlendirmeleri yapmak, Office eklentileri için çalışıyor

Could not load file or assembly System.Threading.Tasks... 

O, ben Word uygulamayı çalıştırmayı denediğinizde bağlayıcı yönlendirmelere onunla ilgili, bu yapılandırma dosyası 'C:\Program Files (x86)\Microsoft Office\Office15' klasörde bulunması ve WINWORD.exe.config adlandırılacak beklediğini benziyor maalesef mümkün değildir çünkü ben Bu klasöre erişemeyebilir.

Benim test_addin.exe.config dosyası:

<?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> 

Doğru yolu gösterecek AppDomain.CurrentDomain.SetupInformation.ConfigurationFile ayarı denedim ama işe görünmüyor, bir iş için yapmak başka yolları da vardır Office eklentisi mi?

cevap

3

Özel bir AssemblyResolve işleyicisi

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; 
     } 
    } 

uygulayarak bu sorunu çözmüş Ama iyi bir çözüm olduğundan emin değilim, o yüzden yeni yanıtlara açık bu soruyu terk ediyorum.

+0

Bunu kodunuza nasıl eklediniz? – SsjCosty

+1

AppDomain.AssemblyResolve olayına abone olun. – animaonline

İlgili konular