System.IO.FileNotFoundException 和 Pivotal.Gemfire.dll
System.IO.FileNotFoundException with Pivotal.Gemfire.dll
我正在将使用 Geode 的 C# windows 服务安装到 UAT Windows 2012 服务器上。引用的 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 将 dll 放入 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 处编译和 运行ning 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
,但总是出现相同的错误。
有什么想法吗?谢谢...
更新:确保你有 x86 和 x64 位 C++ 包回到 2013(对于旧版本的 Geode Net 客户端)
我下载了以前版本的 Geode,9.0.7,名为 Gemstone.Gemfire.Cache.dll 并得到了同样的错误,但那个版本在同一目录中包含一个 Gemstone.Gemfire.Cache.xml。如果我将 xml 文件放到我的 bin 目录中,错误就会停止并且服务会正常启动。
所以 like this 问题是 dll 附带的冗余 xml 文件。我通过创建一个新的虚拟 xml 文件 Pivotal.Gemfire.xml
解决了这个问题
<?xml version="1.0"?>
<doc>
</doc>
这个问题在另一个安装中再次发生。上面使用 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 找到并使用更高版本...
对我来说,标记的答案不起作用。
我必须下载 DependencyWalker,这让我明白了 Pivotal.Gemfire.dll
无法正常工作的原因。丢失的 DLL 之一来自:
安装 64x 位后,应用程序开始运行。
我在本地构建的 Geode Native 再次发生这种情况,当它在新的 Windows 上 运行 10 安装 dependency walker 显示缺少 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++ 构建工具
我还有一次遇到这种情况,我不得不删除对作为本机客户端构建的 Apache Geode dll 的引用和文件,然后再次引用它们。
我正在将使用 Geode 的 C# windows 服务安装到 UAT Windows 2012 服务器上。引用的 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 将 dll 放入 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 处编译和 运行ning 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
,但总是出现相同的错误。
有什么想法吗?谢谢...
更新:确保你有 x86 和 x64 位 C++ 包回到 2013(对于旧版本的 Geode Net 客户端)
我下载了以前版本的 Geode,9.0.7,名为 Gemstone.Gemfire.Cache.dll 并得到了同样的错误,但那个版本在同一目录中包含一个 Gemstone.Gemfire.Cache.xml。如果我将 xml 文件放到我的 bin 目录中,错误就会停止并且服务会正常启动。
所以 like this 问题是 dll 附带的冗余 xml 文件。我通过创建一个新的虚拟 xml 文件 Pivotal.Gemfire.xml
解决了这个问题<?xml version="1.0"?>
<doc>
</doc>
这个问题在另一个安装中再次发生。上面使用 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 找到并使用更高版本...
对我来说,标记的答案不起作用。
我必须下载 DependencyWalker,这让我明白了 Pivotal.Gemfire.dll
无法正常工作的原因。丢失的 DLL 之一来自:
安装 64x 位后,应用程序开始运行。
我在本地构建的 Geode Native 再次发生这种情况,当它在新的 Windows 上 运行 10 安装 dependency walker 显示缺少 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++ 构建工具
我还有一次遇到这种情况,我不得不删除对作为本机客户端构建的 Apache Geode dll 的引用和文件,然后再次引用它们。