我正在安装一个使用Geode到UAT Windows 2012服务器上的C#windows服务。引用的dll(如log4net,newtonsoft.json和QuickFix)正在工作,但Pivotal.Gemfire.dll除外
当我开始服务时,我得到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'
现在Gacutil
未附带Win Server 2012.我已尝试安装Windows SDK和.Net SDK,但未找到Gacutil
可执行文件。所以我试图使用PowerShell进入GAC进入GAC:
[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")
我尝试了各种风格的regsvr32 Pivotal.Gemfire.dll
我尝试在https://github.com/apache/geode-native/tree/develop/executables/GacInstall编译并运行GacInstall可执行文件。它说Installation completed successfully.
但是当我尝试运行服务或尝试使用powershell时:
([system.reflection.assembly]::loadfile("D:\Pivotal.Gemfire.dll")).FullName
我得到了同样的错误。
我尝试过使用运行时程序集绑定的私有程序集
<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>
以及根据Implementing Shared Assembly的各种名称Pivotal.Gemfire
,Apache.Geode.Client
,但始终是相同的错误。
有什么想法吗?感谢...
答案 0 :(得分:1)
我下载了以前版本的Geode 9.0.7,名为Gemstone.Gemfire.Cache.dll并得到了同样的错误,但该版本在同一目录中包含了Gemstone.Gemfire.Cache.xml。如果我将xml文件带到我的bin目录,则错误停止并且服务正常启动。
所以like this问题是一个冗余的伴随xml文件到dll。我通过创建一个新的虚拟xml文件Pivotal.Gemfire.xml
来解决了这个问题<?xml version="1.0"?>
<doc>
</doc>
答案 1 :(得分:1)
答案 2 :(得分:0)
另一个安装再次发生此问题。上面使用xml文件的答案没有解决它,它是通过下载Native Client的版本9.0.7,Gemstone.Gemfire.Cache.dll然后运行
来解决的。 .\gacutil /if C:\Gemstone.Gemfire.Cache.dll
返回Assembly successfully added to the cache
,然后删除了早期版本的dll,但保留了因a strong name issue而无法进入GAC的更高版本Pivotal.Gemfire.dll
。将早期版本的dll导入GAC的这种奇怪的解决方法允许GAC查找 - 并使用 - 更高版本...
答案 3 :(得分:0)
在本地构建的Geode Native再次发生在我身上时,当它在新的Windows 10上运行时,依赖项跟踪器显示缺少MSVCP140D.DLL VCRUNTIME140D.DLL和UCRTBASED.DLL,如下所示。
D与在调试模式下构建客户端有关。 问题与How can I install a Visual Studio C++ redistributable if it is missing?有关,答案是获取dll的发布版本,或转到Visual Studio安装程序,修改,导航到单个组件->编译器,生成工具和运行时,然后检查MSVC v 140 VS 2015 C ++生成工具
答案 4 :(得分:0)
又一次发生在我身上,我不得不删除对作为本机客户端构建的Apache Geode dll的引用和文件,然后再次全部引用。