3

私の C#/.NET プログラムは、Visual Studio (またはチーム エクスプローラー) と共にインストールされるAnyCPU、および参照としてコンパイルされます。Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll私のプログラムは、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 ビットの 2 回コンパイルすると、bin\Debug に正しいバイナリが得られると思います。そうしないでほしい…
  • オプション 2: これらの 32/64 アセンブリをランタイム マシンの GAC に展開します。展開を単純な xcopy に保ちたい...
4

2 に答える 2

1

このアセンブリは Visual Studio の一部であるため、プログラムと共に再配布できるかどうかはわかりません。少なくとも、このアセンブリが含まれる Visual Studio SDK をどの部分にどのように再配布できるかを確認する必要があります。ここここを参照してください。

それらはTFS オブジェクト モデルの一部でもありますが、そのパッケージからアセンブリを配布することもできません。ただし、ソフトウェアを使用する前に、ダウンロードしてインストールするようにユーザーに依頼することはできます。また、それらは 32 ビットのみであるように思われるため、アプリケーションを 32 ビットとしてコンパイルする必要があります。

別の方法は、Web サービスを直接使用することです。ここを参照してください。問題なく AnyCPU と呼ぶことができます。

于 2013-09-08T21:25:48.683 に答える