gpt4 book ai didi

c# - 自动加载 32 位/64 位程序集

转载 作者:行者123 更新时间:2023-11-30 17:52:06 27 4
gpt4 key购买 nike

我的 C#/.NET 程序编译为 AnyCPU,并引用 Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll,它随 Visual Studio(或 Team)一起安装探索者)。我的程序必须在没有安装 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 时,如何模拟这种行为?

  • 选项 1:编译两次 32 位和 64 位,然后我想我会在 bin\Debug 中得到正确的二进制文件。我不想那样做...
  • 选项 2:将这些 32/64 程序集部署到运行时计算机中的 GAC。我想将我的部署保留为一个简单的 xcopy...

最佳答案

我不确定您是否可以使用您的程序重新分发此程序集,因为它们是 Visual Studio 的一部分。至少您需要查看哪些部分以及如何重新分发此程序集所属的 Visual Studio SDK。参见 herehere .

它们也是 TFS Object Model 的一部分,但您也不能从该包分发程序集。但是,您可以要求用户在使用您的软件之前下载并安装它。而且它们似乎只有 32 位,因此您仍然需要将应用程序编译为 32 位。

另一种方法是直接使用网络服务。参见 here .您可以毫无问题地将它们称为 AnyCPU。

关于c# - 自动加载 32 位/64 位程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18684576/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com