2017-08-25 3 views
0

J'installe un service C# Windows qui utilise Geode sur un serveur UAT Windows 2012. Le dll référencé (comme log4net, newtonsoft.json et QuickFix) travaillent à l'exception des Pivotal.Gemfire.dllSystem.IO.FileNotFoundException avec Pivotal.Gemfire.dll

Quand je commence le service que je reçois System.IO.FileNotFoundException: Could not load file or assembly 'Pivotal.Gemfire.dll' or one of its dependencies. The specified module could not be found. File name: 'Pivotal.Gemfire.dll'

Maintenant Gacutil ne vient pas avec Windows Server 2012. Je J'ai essayé d'installer Windows SDK et .Net SDK et je n'ai pas trouvé d'exécutable Gacutil. J'ai donc essayé d'entrer dans le dll dans le GAC en utilisant Powershell comme ceci:

[System.Reflection.Assembly]::Load("System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") 
$publish = New-Object System.EnterpriseServices.Internal.Publish 
$publish.GacInstall("D:\Pivotal.Gemfire.dll") 

J'ai essayé regsvr32 Pivotal.Gemfire.dll en différentes saveurs

J'ai essayé la compilation et l'exécution de l'exécutable GacInstall à https://github.com/apache/geode-native/tree/develop/executables/GacInstall. Il dit Installation completed successfully. mais lorsque je tente d'exécuter le service, ou d'essayer powershell:

([system.reflection.assembly]::loadfile("D:\Pivotal.Gemfire.dll")).FullName

je reçois la même erreur.

J'ai essayé une assemblée privée en utilisant l'assemblage d'exécution liant

<runtime> 
<assemblyBinding 
    xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="Apache.Geode" publicKeyToken="null" culture="neutral" /> 
    <codeBase version="9.1.1-build.2" href="file://Pivotal.Gemfire.dll"/> 
    </dependentAssembly> 
</assemblyBinding> 
</runtime> 

et diverses saveurs de nom Pivotal.Gemfire, Apache.Geode.Client selon Implementing Shared Assembly, mais toujours la même erreur.

Des idées? Merci ...

Répondre

0

J'ai téléchargé la version précédente de Geode, 9.0.7, appelée Gemstone.Gemfire.Cache.dll et j'ai obtenu la même erreur, mais cette version incluait un Gemstone.Gemfire.Cache.xml dans le même répertoire . Si j'ai pris le fichier xml dans mon répertoire bin, l'erreur s'est arrêtée et le service a démarré correctement.

Donc, like this le problème est un fichier xml d'accompagnement redondant à la DLL. Je fixe le problème en créant un nouveau fichier xml factice Pivotal.Gemfire.xml

<?xml version="1.0"?> 
<doc> 
</doc> 
0

Ce problème est arrivé à nouveau avec une autre installation. La réponse ci-dessus en utilisant le fichier XML n'a pas résolu, il a été résolu en téléchargeant la version 9.0.7 du Native Client, Gemstone.Gemfire.Cache.dll et en cours d'exécution puis

.\gacutil /if C:\FIX\IsFix\Gemstone.Gemfire.Cache.dll

qui sont retournés Assembly successfully added to the cache puis retirer la version antérieure de la DLL, mais en conservant la version ultérieure Pivotal.Gemfire.dll que je ne pouvais pas entrer dans le GAC en raison de a strong name issue. Cette solution de contournement bizarre consistant à obtenir la version antérieure de la DLL dans le GAC permet au GAC de trouver - et d'utiliser - la version postérieure ...