Ссылка на 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

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

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


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

Ответы:


165

System.Management.Automation на Nuget

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

Пакеты Microsoft PowerShell и NuGet

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


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 \


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:\

8
Вот это здорово!
— 8DH

2
Очень сладкий. Не подумал бы об этом.
— Мариус

Спасибо за это. Пакет NuGet не будет работать для меня в новом консольном приложении .NET 4.5.2. Он «установил» пакет, но отказался добавить ссылку. Я наконец перестал бороться с NuGet и использовал ваш ответ, чтобы добавить ссылку вручную. Спасибо!
— Lews Therin 05

77

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

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

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

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

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


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.


1

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

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


0

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


У меня была проблема в том, что в проекте была ссылка на правильную DLL, но при повторной сборке возникла ошибка, что пакет автоматизации не найден. Использование Nuget исправило это. Убедитесь, что вы выбрали правильный «Проект по умолчанию» в консоли диспетчера пакетов при запуске Install-Package.
— user3523091
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.