2009-02-06 2 views
7

Возможно ли запустить PowerShell 1.0 (или 2.0 CTP) под управлением 3.5 runtime вместо 2.0?Использование PowerShell с .NET 3.5 runtime/libraries

Мы строим решение в .NET 3.5, и я все еще хотел бы использовать PowerShell, как наш скриптовый движок для запланированных задач и т.д.

мне не нужен синтаксис LINQ или что-нибудь, только 3.5 библиотеки и время выполнения.

FOLLOWUP: Благодарим вас за ответ о динамической загрузке сборок. Но позвольте мне уточнить мой вопрос: есть ли способ запустить PowerShell, чтобы библиотеки по умолчанию запускались по умолчанию? Например, если я вхожу в New-Object System.Xml.XmlDocument, я действительно получаю версию 3.5 по умолчанию?

Semi-связанный с этим вопрос: если я сделать должно динамически загрузить, скажем, System.Xml библиотеку от 3,5, это будет наложения существующих определений символов таким образом, что следующего времени я тип New-Object System.Xml.XmlDocument, он будет загрузить версию 3.5?

ответ

4

Пока ваш получить полное имя права, я не понимаю, почему это не будет работать:

[System.Reflection.Assembly]::Load("System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") 

Я только использовал Linq, как это было первым, кто пришел на ум. В этот момент загружается ddl, и вы можете создавать/использовать объекты из этого.

+0

Я полагаю, однако, что если я динамически загрузить сборку .NET 3.5 (в том числе любые, которые я мог бы написать), а затем создать объект .NET (скажем, , System.Xml.XmlDocument) и передать его методу в моей сборке, я передам объект 2.0 объекту 3.5. Я прав? –

+0

Итак, чтобы передать 3.5 XmlDocument, мне действительно нужно было бы импортировать библиотеку .NET 3.5 System.Xml так, как вы продемонстрировали библиотеку System.Xml.Linq. –

+0

Я не профессионал, но я бы склонен согласиться с тем, что ваши предположения выше правильны. –

3

PowerShell был построен против 2.0, поэтому у вас нет опций, но, по крайней мере, 2.0. Но, как говорит Джеймс, вы можете загрузить функциональность 3,0 и 3,5, загрузив соответствующую сборку. LINQ - хороший пример из 3.5, но вы также можете сделать WPF (3.0) от PowerShell. Помните STA и MTA для WPF, хотя, поскольку только PowerShell v2 имеет полную поддержку WPF (полная поддержка близости потоков).

+0

Как насчет моего вопроса о наложениях? Могу ли я заменить (или, по крайней мере) скрыть сборку 2.0, загрузив эквивалентную сборку 3.5, чтобы изменить стандартную реализацию System.Xml.XmlDocument (например)? –

+0

Я постараюсь найти способ определить это точно. Извините, я пропустил эту часть. Не стесняйтесь отменить ответ. –

3

3.5 - это ДОПОЛНИТЕЛЬНО для 2.0. То есть, в 3.5 нет суперзагруженных классов; это не замена. CLR (общий язык исполнения) по-прежнему v2.0.

8

Если у вас есть 3.5, установленный в вашей системе, это то, что вы получите при запуске PowerShell.

PowerShell только «требует» 2.0, но 3.0 и 3.5 совместимы и автофокусированы при установке. В PowerShell V2 мы действительно посмотрим, какая у вас версия и «осветить» некоторые функции (например, PowerShell_ISE и Out-GridView доступны, когда у вас есть 3.51).

Эксперимент! Наслаждайтесь! Engage!

Джеффри Snover [MSFT] управления Windows Партнер Архитектор