Из-за виртуализации файловой системы вы не можете указать путь к 64-разрядной версии PowerShell из 32-разрядного процесса (т. Е. Visual Studio, в которой размещается механизм msbuild). Один из хакерских способов обойти это - создать 64-разрядную программу запуска, которая будет работать как 64-разрядная и запустить 64-разрядную версию PowerShell. Вот простая программа на C #, которая сделает это:
using System;
using System.Diagnostics;
class App
{
static int Main(string[] args)
{
Process process = Process.Start("PowerShell.exe", String.Join(" ", args));
process.WaitForExit();
return process.ExitCode;
}
}
Обязательно скомпилируйте это как 64-битное, вот так:
csc .\PowerShell64.cs /platform:x64
Затем из вашего события после сборки запустите этот модуль запуска, передав ему параметры, с которыми вы хотите вызвать 64-битный PowerShell. Кроме того, в PowerShell 2.0 я бы порекомендовал использовать параметр File
для выполнения скрипта, например ::10000
c:\path\PowerShell64.exe -File "$(MSBuildProjectDirectory)\CreateSite.ps1" auto
Тем не менее, безусловно, должен быть какой-то другой способ (утилита), который запускает exes из 64-битного процесса.