无法加载WITDataStore64 dll

时间:2019-07-16 20:44:07

标签: powershell

我正在尝试运行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正在加载;只是这个没有加载。

Microsoft有一个documents page about this exception,它建议我“通过使用开发语言提供的功能来处理DLL中定义的方法。”我认为它假设我使用的不仅仅是PowerShell。如果有一种方法可以通过powershell访问DLL的方法,则我不知道。

是什么使该dll尤其难以加载,如何才能将其加载?

1 个答案:

答案 0 :(得分:1)

您得到的错误是某些代码试图将本机dll(缺少使它成为CLR程序集的魔术位)作为程序集加载。

程序集Microsoft.VisualStudio.Services.Common.dll可以通过nuget获得不同版本,并且可以任何版本安装在本地计算机上。

我还看到一些related questions关于加载同一程序集的问题和错误的信息。

我能够将软件包的旧版本从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,但我不知道如何使用它。