tôi tìm thấy bài viết này trên CodeProject: http://www.codeproject.com/Articles/512956/NET-Shell-Extensions-Shell-Context-MenusKý một F # hội (tên Mạnh component)
và nghĩ rằng nó sẽ được tốt đẹp để cung cấp cho nó một thử, nhưng trong F #. Vì vậy, tôi đã đưa ra mã sau:
open System
open System.IO
open System.Text
open System.Runtime.InteropServices
open System.Windows.Forms
open SharpShell
open SharpShell.Attributes
open SharpShell.SharpContextMenu
[<ComVisible(true)>]
[<COMServerAssociation(AssociationType.ClassOfExtension, ".txt")>]
type CountLinesExtension() =
inherit SharpContextMenu.SharpContextMenu()
let countLines =
let builder = new StringBuilder()
do
base.SelectedItemPaths |> Seq.iter (fun x -> builder.AppendLine(sprintf "%s - %d Lines" (Path.GetFileName(x)) (File.ReadAllLines(x).Length)) |> ignore )
MessageBox.Show(builder.ToString()) |> ignore
let createMenu =
let menu = new ContextMenuStrip()
let itemCountLines = new ToolStripMenuItem(Text = "Count Lines")
do
itemCountLines.Click.Add (fun _ -> countLines)
menu.Items.Add(itemCountLines) |> ignore
menu
override this.CanShowMenu() = true
override this.CreateMenu() = createMenu
Tuy nhiên, tôi nhận thấy rằng không có hỗ trợ ký hợp đồng F # trong VS2012 (bước 4. trong bài viết). Tôi đã học được rằng nếu tôi muốn làm như vậy, tôi cần phải tạo một khóa bằng tay (gõ "sn -k keyName.snk" vào dấu nhắc lệnh) và sau đó thêm một lá cờ trong "Thuộc tính dự án -> Xây dựng -> Cờ khác" (--keyfile: keyName.snk).
Tôi vẫn không quản lý thành công việc này. Hơn nữa, bằng cách sử dụng ứng dụng của tác giả (trong phần "Gỡ lỗi Shell mở rộng") tôi nhận được một lỗi mà lắp ráp của tôi không chứa một máy chủ COM.
Tôi tin rằng tôi đang làm điều gì đó sai khi ký hợp phần. Bạn có thể giúp tôi trong việc này không?
Tôi tin rằng sự cố của bạn với lỗi máy chủ COM phải thực hiện với khóa của bạn, không phải với F #. Đảm bảo chứng chỉ bạn đang sử dụng được đăng ký với máy cục bộ của bạn. – mydogisbox
Bạn cũng có thể thử một cái gì đó như thế này: http://books.google.com/books?id=66jOWQEvBMEC&pg=PA540&lpg=PA540&dq=F%23+keyfile&source=bl&ots=e26aaV710y&sig=7OXthSKQPwnMUESnVstC5DXwk14&hl=vi&sa=X&ei=xkPtUe_BOey6yAGpjIC4BQ&ved=0CG4Q6AEwCQ#v = onepage & q = F% 23% 20keyfile & f = false – mydogisbox
"Không chứa máy chủ COM" đề xuất sự cố với khả năng hiển thị/đăng ký thành phần COM của bạn. Bạn có thể sử dụng 'sn -v' (hoặc là nó' -V'?) Để xác minh ký của bạn nhưng dòng dưới cùng là sẽ có một lỗi ở đâu đó nói lỗi chữ ký xác thực nếu đó là vấn đề. Và nhận được ProcMon và DbgView về vụ án. Nếu bạn nhận được bất kỳ thông tin chi tiết hơn lỗi chính xác vv, không có hại để thêm chi tiết ở đây –