Ссылка на system.management.automation.dll в Visual Studio

131

Я начинаю изучать модель PowerShell и разработку оснастки. Первое, что я замечаю, - это ссылка на System.management.automation.dll. Однако в Visual Studio на вкладке .NET нет этой сборки, и никто не может перейти к

C:\windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll

чтобы сделать ссылку на файл.

Принужден ли я копировать файл вручную, чтобы облегчить работу с ним ?

icelava
источник
Не могли бы вы изменить принятый ответ на этот? Пакетный подход NuGet кажется наиболее простым и надежным.
julealgon

Ответы:

165

System.Management.Automation на Nuget

System.Management.Automation.dll на NuGet , более новый пакет от 2015 года, не исключенный из списка, как предыдущий!

Пакеты Microsoft PowerShell и NuGet

Обновление: пакет теперь принадлежит команде PowerShell. Ура!

skfd
источник
2
Это заслуживает большего
foobarcode
5
Я бы хотел, чтобы Microsoft взяла на себя ответственность за этот Nuget, поскольку в наши дни они настолько сырые от открытости.
skfd
@skfd Microsoft уже практически владеет Nuget .. Люди, стоящие за ним, используют электронную почту microsoft.com, а сам NuGet является частью Microsoft .NET Foundation ( dotnetfoundation.org )
Майкл Бисбьерг
1
@MichaelBisbjerg, я думаю, он в основном имел в виду этот конкретный пакет NuGet. Если бы он принадлежал Microsoft, то (в идеальном мире) они бы несли ответственность за его обновление, выпуск новых пакетов и т. Д.
Бен Рэндалл,
последнее обновление: 29/03/2013 «Владелец исключил этот пакет из списка. Это может означать, что пакет устарел или больше не должен использоваться».
juFo
97

Копия System.Management.Automation.dll устанавливается при установке Windows SDK (в любом случае, подходящей последней версии). Он должен находиться в C: \ Program Files \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ v1.0 \

tomasr
источник
2
Я установил SDK на 2 разных 64-битных компьютерах (с трудом) и нашел версию 6.2.8229.0, 4.66MB dll только на 1 и только в c: \ program files (x86) \ reference assembly \ microsoft \ windowspowershell \ v1.0. Я настоятельно рекомендую отредактировать файл .csproj или проверить правильную библиотеку DLL для управления версиями и сделать ссылку на нее. Установка SDK слишком негибкая.
Джеймс Маклахлан
@ ashes999 PowerShell 2.0 фактически работает на 1.0 DLL.
kravits88
3
2014.07.11 на x64 он находится в C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0 \ System.Management.Automation.dll
Christopher G. Lewis
Я не знаю о SDK, но знаю, что WMF 3.0 не устанавливает его в C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0. Я хотел установить PowerShell 3.0 на Windows 7 SP1 с версией 1.0, расположенной в C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 1.0, и я использовал Windows6.1-KB2506143-x64.msi от Microsoft .com / en-us / download / details.aspx? id = 34595, и он успешно работает. Однако он создал * .dll только в C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.Management.Automation / v4.0_3.0.0.0__31bf3856ad364e35.
Александр Самойлов
Это правильная * .dll, потому что команда "powershell.exe -version 3.0" перестает работать, если я перемещаю * .dll. Размер * .dll отличается от того, который по умолчанию присутствует на другом компьютере с Windows 10 в папке C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0. Я могу создать папку C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0 на машине с Windows 7 SP1 и поместить туда * .dll из C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System. Management.Automation / v4.0_3.0.0.0__31bf3856ad364e35, но вопрос, как правильно установить.
Александр Самойлов
85

Если вы не хотите устанавливать Windows SDK, вы можете получить dll, выполнив следующую команду в PowerShell:

Copy ([PSObject].Assembly.Location) C:\
kravits88
источник
8
Вот это здорово!
8DH
2
Очень сладкий. Не подумал бы об этом.
Мариус
Спасибо за это. Пакет NuGet не будет работать для меня в новом консольном приложении .NET 4.5.2. Он «установил» пакет, но отказался добавить ссылку. Я наконец перестал бороться с NuGet и использовал ваш ответ, чтобы добавить ссылку вручную. Спасибо!
Lews Therin 05
77

Мне не удалось правильно установить SDK (некоторые файлы казались неподписанными, что-то в этом роде). Я нашел здесь другое решение, и, похоже, оно мне подходит. Совершенно не требует установки новых файлов. В основном, что вы делаете:

Отредактируйте файл .csproj в текстовом редакторе и добавьте:

<Reference Include="System.Management.Automation" />

в соответствующий раздел.

Надеюсь это поможет.

JP.
источник
1
Мне кажется странным, что нам приходится делать это вручную (редактировать файл .csproj), но у меня это сработало.
kd7iwp
Редактирование файла проекта просто заставляет его загружать версию из GAC (которая является версией V2) вместо файловой системы (которая является версией V1),
Дерек Эвермор
Это может привести к проблемам при развертывании приложения на сервере, поскольку сборка может быть там не найдена.
marsze 03
9

если они 64-битные - C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell ** 3.0 **

и версия могла быть другой

Прадип
источник
2

Я использовал меню VS Project Reference и перешел к: C: \ windows \ assembly \ GAC_MSIL \ System.Management.Automation и добавил ссылку на dll и DLL Runspaces.

Мне не нужно было взламывать файл .csprj и добавлять указанную выше справочную строку. У меня не установлен Windows SDK.

Я сделал копию Powershell, упомянутую выше: Копировать ([PSObject] .Assembly.Location) C: \

Затем мой тест с командой Get-Process Powershell сработал. Я использовал примеры из Powershell для разработчиков Глава 5.

dpminusa
источник
1

Сборка, поставляемая с Powershell SDK (C: \ Program Files \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ v1.0), не поставляется с конкретными типами Powershell 2.

Редактирование файла csproj вручную решило мою проблему.

Radu
источник
0

Вы также можете использовать nuget: https://www.nuget.org/packages/System.Management.Automation/ Возможно, это лучший вариант.

NOWAN
источник
У меня была проблема в том, что в проекте была ссылка на правильную DLL, но при повторной сборке возникла ошибка, что пакет автоматизации не найден. Использование Nuget исправило это. Убедитесь, что вы выбрали правильный «Проект по умолчанию» в консоли диспетчера пакетов при запуске Install-Package.
user3523091