2012-10-14 667 views
31

Tôi đã cố gắng sử dụng điều khiển nguồn yêu thích của mình từ bảng điều khiển Gói quản lý trong Visual Studio 2010. Tôi đã gặp phải các sự cố được mô tả trong một topic khác. Bây giờ, câu trả lời hay nhất là di chuyển tất cả các công cụ dòng lệnh từ Visual Studio sang Powershell.Sử dụng lệnh NuGet powershell từ bên ngoài Visual Studio

Nhưng trường hợp này, lệnh liên quan đến Visual Studio không hoạt động. Ví dụ, quan trọng nhất - tôi không thể chạy lệnh Update-Database từ Entity Framework.

Có thể đăng ký bằng cách nào đó lệnh Visual Studio cụ thể cho dự án hiện tại trong Powershell không? Hoặc làm cho Powershell tự động lấy ngữ cảnh dự án hiện tại từ packages thư mục con?

+5

tôi phải từ bỏ sử dụng NuGet do hỗ trợ giới hạn của lệnh dòng lệnh. Tôi không thể sử dụng nó trong Jenkins đúng cách. – Rafa

+0

Tôi có cùng một vấn đề. Vẫn còn làm ướt cho một giải pháp. – Callan

Trả lời

4

Tôi không quen thuộc với lệnh ghép ngắn Visual Studio, nhưng bạn có thể nhập mô-đun vào phiên PowerShell của mình bằng cách sử dụng Import-Module -Name <ModuleName>. Bạn có thể liệt kê các mô đun PowerShell sẵn có (aka. "Đã cài đặt") bằng cách sử dụng `Get-Module -ListAvailable '.

Tôi đoán là lệnh ghép ngắn Visual Studio được chứa với mô-đun PowerShell của riêng mình, nhưng có thể nó không được "cài đặt" vào một trong các vị trí tiêu chuẩn trong $env:PSModulePath. Nếu trường hợp này xảy ra, bạn có thể cần tìm thư mục mô-đun và nhập trực tiếp tệp .psd1 hoặc .psm1 và chuyển nó vào: Import-Module -Name <FullPathToModuleFile>.

Như một ví dụ ở trên, chú ý về nơi module Windows Azure PowerShell tọa lạc: http://trevorsullivan.net/2012/06/07/introducing-microsofts-official-windows-azure-powershell-module/

Đó là trong thư mục Program Files, và không có sẵn ngay lập tức để PowerShell, trừ khi bạn nhập các mô-đun từ của nó đường dẫn đầy đủ (tệp manifest module .psd1).

Hy vọng điều này sẽ hữu ích.

9

Lệnh NuGet PowerShell dựa vào việc chạy từ bên trong Visual Studio, do đó sẽ không hoạt động bên ngoài trong PowerShell bình thường chạy từ dòng lệnh.

Tuy nhiên, bạn có thể sử dụng migrate.exe được giao với gói EntityFramework NuGet và sử dụng gói đó từ dòng lệnh để cập nhật cơ sở dữ liệu của bạn.

Là mẫu thử nghiệm, tôi đã đặt cùng một cách để sử dụng NuGet PowerShell commands from the normal PowerShell command line using SharpDevelop. Thật không may tại thời điểm gói EntityFramework NuGet không hoạt động với SharpDevelop.

Một dự án thú vị khác là StudioShell cung cấp ổ DTE mới bên trong Visual Studio nhưng cũng có thể được sử dụng bên ngoài từ dòng lệnh. Tôi không tin rằng nó hỗ trợ các lệnh NuGet PowerShell đang chạy từ dòng lệnh PowerShell bình thường.

6

Tôi có thể tìm thấy các tập tin NuGet.psd1 tại địa chỉ:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\5ttpefif.3mk\Modules\NuGet\NuGet.psd1.

Tuy nhiên, khi bạn cố gắng để tải nó:

PS> Import-Module $pathToNuGetPsd1 -Force -NoClobber -Scope Global 
Import-Module : The name of the current Windows PowerShell host is: 'ConsoleHost'. 
The module 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ 
Extensions\5ttpefif.3mk\Modules\NuGet\NuGet.psd1' requires the following Windows 
PowerShell host: 'Package Manager Host'. 

Tôi nghĩ chúng ta đang trên may mắn. Nó phải được chạy từ Package Manager Host và yêu cầu những thứ từ Visual Studio như đã nêu bởi Matt.

Để giải quyết vấn đề của mình, tôi đã sử dụng Chocolatey để cài đặt NuGet.CommandLine và sau đó sử dụng NuGet.bat để làm những gì tôi cần.Đó là một ít công việc hơn và có thể không hoạt động trong mọi trường hợp tùy thuộc vào những gì bạn đang cố gắng làm.

Chocolatey: https://github.com/chocolatey/chocolatey/wiki/Installation

NuGet.CommandLine:

PS> cinst NuGet.CommandLine 
+2

Bạn có thể thay đổi tên máy chủ lưu trữ bằng mã này '$ host.gettype(). GetField ('nameResult', 'Instance, NonPublic'). SetValue ($ host, 'Package Manager Host')', nhưng sau đó có thêm lỗi. – mtman