2011-03-24 35 views

Trả lời

11

Đây thực sự là một câu chuyện thú vị về tác dụng phụ.

Visual Studio có danh sách các hội đồng cố định trong hộp thoại "Thêm tham chiếu" của họ.
Mọi thứ khác phải được duyệt. Nhà phát triển có xu hướng duyệt tìm vị trí này trong thư mục Windows, nơi System.Management.Automation.dll (lắp ráp chạy hầu hết các cuộc sống PowerShell) Điều này đã thực hiện một tham chiếu tuyệt đối cho vị trí này. Vì sẽ không có tùy chọn cài đặt song song với PowerShell (như có .NET framework), sự lựa chọn tốt nhất có sẵn là cho phép mọi người tiếp tục tham chiếu cùng một assembly, cả theo đường dẫn và bởi StrongName, như họ đã làm trước đây.

Nếu câu chuyện này không tồn tại theo cách này, tất cả các ứng dụng được viết trên đầu PowerShell V1 sẽ phải được phát hành lại cho V2.

+1

Đây không phải là GAC là gì? – Simon

+1

Oh BTW bao gồm chữ ký của bạn trên mọi câu trả lời là một sự lãng phí không gian :) – Simon

4

Tôi nghĩ rằng vì PowerShell 2.0 cực kỳ tương thích với 1.0, không cần phải có hai phiên bản khác nhau trên cùng một máy. Vì vậy, họ đặt 2.0 trên đầu trang 1.0 trên các hệ thống XP và Vista và rất có thể đã quyết định giữ cùng một thư mục cho Windows 7. Đây cũng là lý do tương tự mà phần mở rộng vẫn là .ps1 (và .psm1, .psd1).

Bạn có thể yêu cầu tương tự cho Windows 7 x64. Tại sao hệ thống 64 bit dll trong một thư mục được gọi là System32 và tại sao những tên dlls 64 bit đó lại kết thúc bằng "32", ví dụ: user32.dll, kernel32.dll, vv :-)

+0

Không có gì để làm với "khả năng tương thích cực", nhưng khả năng tương thích ngược. – manojlds

7

Tôi chỉ nghĩ rằng, ngay từ đầu, nhóm Microsoft có kế hoạch triển khai các phiên bản PowerShell cạnh nhau, giống như nó được thực hiện cho các phiên bản Framework .NET. Nhưng với thời gian họ quyết định chỉ hỗ trợ một PowerShell vào thời điểm đó.

Có điều gì đó kỳ lạ hơn khi bạn sử dụng tham số -version của dòng lệnh để chọn phiên bản 1.0 var $PSVersionTable có mặt với PSVersion có giá trị là 2.0. $ PSVersionTable là không có mặt trong PowerShell 1,0

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>powershell -version 1.0 
Windows PowerShell 
Copyright (C) 2009 Microsoft Corporation. Tous droits réservés. 

PS C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC> cd \ 
PS C:\> $PSVersionTable 

Name       Value 
----       ----- 
CLRVersion      2.0.50727.4952 
BuildVersion     6.1.7600.16385 
PSVersion      2.0 
WSManStackVersion    2.0 
PSCompatibleVersions   {1.0, 2.0} 
SerializationVersion   1.1.0.1 
PSRemotingProtocolVersion  2.1 

Nếu bạn có một cái nhìn vào var $host mà tồn tại trên cả hai phiên bản

PowerShell V2.0 (VI phiên bản 1.0 hoặc 2,0)

PS > $host 
Name    : ConsoleHost 
Version   : 2.0 
InstanceId  : b6ae2582-c1f4-422a-b057-16458b387f7d 
UI    : System.Management.Automation.Internal.Host.InternalHostUserInterface 
CurrentCulture : fr-FR 
CurrentUICulture : fr-FR 
PrivateData  : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy 
IsRunspacePushed : False 
Runspace   : System.Management.Automation.Runspaces.LocalRunspace 

PowerShell V1.0

PS > $Host 
Name    : ConsoleHost 
Version   : 1.0.0.0 
InstanceId  : b55940f2-b3b2-4f99-b895-98aac4752369 
UI    : System.Management.Automation.Internal.Host.InternalHostUserInterface 
CurrentCulture : fr-FR 
CurrentUICulture : fr-FR 
PrivateData  : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy 

Ý kiến ​​của tôi là PowerShell V2.0 có thể chạy hầu như tất cả các tập lệnh PowerShell V1.0. Microsoft thêm một số vars và bạn có thể gặp rắc rối nếu bạn có những vars hiện diện trong kịch bản của bạn nhưng đó là đậu phộng.

JP

+0

Trong Windows 8, nó vẫn còn trong C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe và $ PSVersionTable cho thấy một PSVersion của 3.0. – benjguin

Các vấn đề liên quan