无法加载WITDataStore64 dll文件

4
我正在尝试运行一个PowerShell脚本,需要加载多个程序集来完成我的任务。大多数程序集都可以正常加载,但有一个我无法正常使用:

Microsoft.VisualStudio.Services.Common.dll

我尝试了几种不同的方法。

我尝试了LoadFrom、ReflectionOnlyLoadFrom和Add-Type -Path方法,但它们都返回一个错误,说

无法加载文件或程序集'path\Microsoft.WITDataStore64.dll'或其其中之一的依赖项。该模块应该包含一个程序集清单......

FulllyQualifiedErrorID:BadImageFormatException

我尝试了ReflectionOnlyLoad,但它只是返回一个错误,说

使用“1”个参数调用“ReflectionOnlyLoad”时出错:“无法加载文件或程序集'$pathToDlls\\Microsoft.WITDataStore64.dll'或其其中之一的依赖项。给定的程序集名称或代码库无效。

(HRESULT的异常:0x80131047)”

路径是正确的——我已经视觉确认了文件是否存在——dll的名称也是正确的(只是为了确保复制粘贴了文件名)。其他dll正在正常加载,只有这一个没有加载。

微软有一个关于此异常的文档页面,并建议我使用开发语言提供的功能“访问DLL中定义的方法”。我认为它假设我正在使用不仅仅是PowerShell。如果有一种通过PowerShell访问DLL方法的方法,我不知道。

是什么让这个特定的dll更难加载,我该如何让它加载?


完成,但内部异常只是重复了错误消息所说的内容。"无法加载文件或程序集或其某个依赖项。给定的程序集名称或代码库无效。" - MrSpudtastic
刚刚重新阅读了问题,你应该使用ReflectionOnlyLoadFrom()而不是ReflectionOnlyLoad() - Mathias R. Jessen
你正在使用32位的PowerShell吗? - Prasoon Karunan V
@PrasoonKarunanV 我想我是。 - MrSpudtastic
你可以看一下这个微软论坛。此问题似乎类似于你的,并提到了一个解决方法。 https://social.msdn.microsoft.com/Forums/sqlserver/en-US/2d047112-ad50-4515-811d-ba1ab53465f0/tfs-2015-sdk-missing-microsoftwitdatastore64dll?forum=tfsgeneral - phiz
显示剩余4条评论
1个回答

1
您遇到的错误是有些代码试图将本地dll(缺少使其成为CLR程序集的魔术位)作为程序集加载。
程序集Microsoft.VisualStudio.Services.Common.dll可以通过nuget以不同版本获得,并且可能已安装在本地计算机的任何版本上。
我还看到一些关于加载相同程序集时出现问题和错误的相关 问题
我能够从NuGet加载旧版本的包到本地文件夹并在powershell中访问它:
  • 安装.net core SDK(2.0或更高版本)
  • 安装.net 4.5.2 Developer Pack
  • 创建一个空文件夹
  • 在文件夹中打开powershell提示符
然后运行:
dotnet new console --target-framework-override net452
dotnet add package Microsoft.TeamFoundationServer.ExtendedClient -v 14.89.0
dotnet build .
add-type -Path .\bin\Debug\net452\Microsoft.VisualStudio.Services.Common.dll
[microsoft.visualstudio.services.common.VssEnvironment]::GetTfsSharedFilesPath()

如果这个方法可行,您可能想切换到使用 nuget.exe - 这不需要安装 SDK,但我不知道如何使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接