Как я могу выполнить PowerShell с.NET 4 времени выполнения?

Ваш контроллер ожидает currentStateDatas как string, но в вашем js-коде это объект, вы также должны преобразовать currentStateDatas в строку, используя JSON.stringify.

$.ajax({
        url: "@Url.Action("SaveTempReport", "Report")",
        type: "POST",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({ "categoryIds": categoryIds, 
                               "reportName": reportName, 
                               "Description": description, 
                               "tempReportId": tempReportId, 
                               "chartState": JSON.stringify(currentStateDatas), 
                               "deparmentIds": deparmentIds}),
        success: function (response) {
        }
    });
231
задан Anthony Mastrean 27 August 2011 в 09:58
поделиться

5 ответов

PowerShell (Двигатель) работает под .NET 4.0. PowerShell (хост консоли и ISE не просто, просто потому, что они были скомпилированы против более старых версий .NET. Существует настройка реестра, которая будет изменять системный режим .NET SystemyWide , который в свою очередь, позволяет PowerShell использовать классы .NET 4.0:

reg add hklm\software\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1
reg add hklm\software\wow6432node\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1

Чтобы обновить просто ISE для использования .NET 4.0, вы можете изменить Конфигурация ($ pshome \ powershell_ise.exe.config), чтобы иметь такое кусок:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup>
      <supportedRuntime version="v4.0.30319" />
    </startup>
</configuration>

, вы можете построить приложения .NET 4.0, которые вызывают PowerShell, используя API PowerShell (System.Management.automation.PowerShell) просто хорошо, но Эти шаги помогут получить место в поле PowerShell для работы под .NET 4.0.


Снимите ключи реестра, когда вам больше не нуждаются. Это машинные клавиши и насильственно мигрируют все приложения в .NET 4.0, даже приложения, используя .NET 2 и .NET 3.5


147
ответ дан 23 November 2019 в 03:37
поделиться

Просто выполните powershell.exe с COMPLUS_version набор переменной среды к v4.0.30319. Например, из cmd.exe или .bat-файла:

set COMPLUS_version=v4.0.30319
powershell -file c:\scripts\test.ps1
1
ответ дан 23 November 2019 в 03:37
поделиться

Вот содержимое конфигурационного файла, который я использовал для поддержки сборок .NET 2.0 и .NET 4:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!-- http://msdn.microsoft.com/en-us/library/w4atty68.aspx -->
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" />
    <supportedRuntime version="v2.0.50727" />
  </startup>
</configuration>

Также вот упрощенная версия кода PowerShell 1. 0 совместимого кода, который я использовал для выполнения наших сценариев из переданных аргументов командной строки:

class Program {
  static void Main( string[] args ) {
    Console.WriteLine( ".NET " + Environment.Version );

    string script = "& " + string.Join( " ", args );
    Console.WriteLine( script );
    Console.WriteLine( );

    // Simple host that sends output to System.Console
    PSHost host = new ConsoleHost( this );
    Runspace runspace = RunspaceFactory.CreateRunspace( host );

    Pipeline pipeline = runspace.CreatePipeline( );
    pipeline.Commands.AddScript( script );

    try {
      runspace.Open( );
      IEnumerable<PSObject> output = pipeline.Invoke( );
      runspace.Close( );

      // ...
    }
    catch( RuntimeException ex ) {
      string psLine = ex.ErrorRecord.InvocationInfo.PositionMessage;
      Console.WriteLine( "error : {0}: {1}{2}", ex.GetType( ), ex.Message, psLine );
      ExitCode = -1;
    }
  }
}

В дополнение к основной обработке ошибок, показанной выше, мы также вводим в сценарий оператор trap для отображения дополнительной диагностической информации (аналогично функции Resolve-Error Джеффри Сновера).

17
ответ дан 23 November 2019 в 03:37
поделиться

В качестве еще одного варианта последний выпуск PoshConsole включает двоичные файлы, предназначенные для .NET 4 RC (которые работают штраф против версии RTM) без какой-либо конфигурации.

6
ответ дан 23 November 2019 в 03:37
поделиться

Пожалуйста, будьте ОЧЕНЬ осторожны с использованием подхода с ключами реестра. Это общемашинные ключи, и они принудительно переносят ВСЕ приложения на .NET 4.0.

Многие продукты не работают при принудительной миграции, и это средство тестирования, а не механизм обеспечения качества производства. Visual Studio 2008 и 2010, MSBuild, turbotax, множество веб-сайтов, SharePoint и так далее не должны быть автоматически мигрированы.

Если вам необходимо использовать PowerShell с 4.0, это должно быть сделано на основе каждого приложения с помощью конфигурационного файла, точные рекомендации следует уточнить у команды PowerShell. Это может привести к поломке некоторых существующих команд PowerShell.

28
ответ дан 23 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: