我的C#/。NET程序编译为AnyCPU
,并引用Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll
,它随Visual Studio(或团队资源管理器)一起安装。我的程序必须在没有安装VS的计算机上运行,无论是32位还是64位,所以我必须将这个程序集带到我的程序中。它目前在32位计算机上运行,但不在64位计算机上运行,因为它无法加载此程序集。
构建之后,在bin \ Debug中我获得了这个程序集的32位版本,VS可能来自C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll
。这是程序在32位计算机上的工作方式。但我的程序也在本地运行64位,并且32位程序集被加载,怎么会这样?为了检查,我给我写了一个小PowerShell:
param([string] $path)
$AssemblyName = [Reflection.Assembly]::Loadfile($path).GetName()
write-output $AssemblyName | fl
并将其作为32位和64位运行:
> powershell.exe -ExecutionPolicy ByPass -f .\f.ps1 Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll
(...)
CodeBase : file:///C:/windows/assembly/GAC_64/Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader/11.0.0.0
> C:\Windows\SysWow64\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -f .\f.ps1 Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll
(...)
CodeBase : file:///C:/windows/assembly/GAC_32/Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader/11.0.0.0__b03f5f7f11d50a3a/Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll
啊,看起来VS在32位和64位上都将程序集安装到GAC,而.NET加载程序知道加载正确的程序集。
我的问题 :当我无法安装VS时,如何模拟此类行为?
答案 0 :(得分:1)
我不确定您是否可以使用您的程序重新分发此程序集,因为它们是Visual Studio的一部分。至少您需要查看哪些部分以及如何重新分发此程序集所属的Visual Studio SDK。请参阅here和here。
它们也是TFS Object Model的一部分,但您也无法从该包中分发程序集。但是,您可以要求用户在使用您的软件之前下载并安装该软件。它们似乎只是32位,因此您仍然需要将应用程序编译为32位。
另一种方法是直接使用webservices。见here。你可以毫无问题地称他们为AnyCPU。
答案 1 :(得分:0)
您可以尝试通过利用fusion API以编程方式在GAC中安装程序集。
此处有更多详情:http://www.codeproject.com/Articles/8285/GAC-API-Interface