带有Pivotal.Gemfire.dll的System.IO.FileNotFoundException

时间:2017-08-25 12:25:49

标签: gac gemfire geode

我正在安装一个使用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.GemfireApache.Geode.Client,但始终是相同的错误。

有什么想法吗?感谢...

5 个答案:

答案 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)

对我来说,标记的答案无效。

我不得不下载DependencyWalker,这向我展示了Pivotal.Gemfire.dll为何不起作用。缺少的DLL之一来自:

  

Visual C++ Redistributable Packages for Visual Studio 2013

安装64x位之后,应用程序开始工作。

答案 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,如下所示。

enter image description here

D与在调试模式下构建客户端有关。 问题与How can I install a Visual Studio C++ redistributable if it is missing?有关,答案是获取dll的发布版本,或转到Visual Studio安装程序,修改,导航到单个组件->编译器,生成工具和运行时,然后检查MSVC v 140 VS 2015 C ++生成工具

enter image description here

答案 4 :(得分:0)

又一次发生在我身上,我不得不删除对作为本机客户端构建的Apache Geode dll的引用和文件,然后再次全部引用。