私の 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 に保ちたい...