Znalazłem ten artykuł na CodeProject: http://www.codeproject.com/Articles/512956/NET-Shell-Extensions-Shell-Context-MenusPodpisanie F # Assembly (nazwa silny komponent)
i pomyślałem, że byłoby miło, aby spróbować, ale w F #. Więc wpadłem na następujący kod:
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
Jednak zauważyłem, że nie ma wsparcia dla podpisania # zespół F w VS2012 (krok 4. w artykule). Dowiedziałem się, że jeśli chcę to zrobić, muszę ręcznie utworzyć klucz (wpisując "sn -k keyName.snk" w wierszu polecenia), a następnie dodać flagę w "Właściwości projektu -> Kompilacja -> Inne flagi" (--keyfile: keyName.snk).
Nadal nie udało mi się z powodzeniem uruchomić tego. Co więcej, używając aplikacji autora (w sekcji "Debugowanie rozszerzenia powłoki") pojawia się błąd, że mój zespół nie zawiera serwera COM.
Uważam, że robię coś nie tak z podpisaniem komponentu. Czy możesz mi pomóc w prowadzeniu tego?
Uważam, że twój problem z błędem serwera COM ma związek z twoim kluczem, a nie z F #. Upewnij się, że certyfikat, którego używasz, jest zarejestrowany na lokalnym komputerze. – mydogisbox
Można również spróbować czegoś takiego: http://books.google.com/books?id=66jOWQEvBMEC&pg=PA540&lpg=PA540&dq=F%23+keyfile&source=bl&ots=e26aaV710y&sig=7OXthSKQPwnMUESnVstC5DXwk14&hl=en&sa=X&ei=xkPtUe_BOey6yAGpjIC4BQ&ved=0CG4Q6AEwCQ#v = onepage & q = F% 23% 20keyfile & f = false – mydogisbox
"Nie zawiera serwera COM" sugeruje problem z widocznością/rejestracją twojego składnika COM. Możesz użyć 'sn -v' (lub jest to' -V'?), Aby zweryfikować swoje podpisywanie, ale w dolnej linii pojawi się błąd informujący o tym, że jest to problem. I zdobądź ProcMon i DbgView w sprawie. Jeśli otrzymasz więcej szczegółowych informacji o błędach itp., Nie zaszkodzę, aby dodać ten szczegół tutaj –