Unterzeichnung fand ich diesen Artikel auf Codeproject: http://www.codeproject.com/Articles/512956/NET-Shell-Extensions-Shell-Context-Menuseinen F # Assembly (Strong Name-Komponente)
und dachte, es wäre schön, es zu versuchen, aber in F #. So kam ich mit dem folgenden Code auf:
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
Allerdings habe ich festgestellt, dass es keine Unterstützung ist eine F # Montage in VS2012 (Schritt 4 im Artikel) für die Unterzeichnung. Ich habe gelernt, dass, wenn ich dies tun möchte, ich manuell einen Schlüssel erstellen muss (Eingabe von "sn-k keyName.snk" in die Eingabeaufforderung) und fügen Sie dann ein Flag in "Project Properties -> Build -> Other Flags" (--keyfile: Schlüsselname.snk).
Ich schaffte es immer noch nicht, dies erfolgreich auszuführen. Außerdem bekomme ich mit der Anwendung des Autors (im Abschnitt "Debugging der Shell-Erweiterung") einen Fehler, dass meine Assembly keinen COM-Server enthält.
Ich glaube, ich mache etwas falsch mit der Unterzeichnung der Komponente. Könntest du mir helfen, das zu tun?
Ich glaube, Ihr Problem mit dem COM-Server-Fehler hat mit Ihrem Schlüssel zu tun, nicht mit der F #. Stellen Sie sicher, dass das von Ihnen verwendete Zertifikat auf Ihrem lokalen Computer registriert ist. – mydogisbox
Sie können auch so etwas wie dies versuchen: 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
"Enthält keinen COM-Server" schlägt ein Problem mit der Sichtbarkeit/Registrierung Ihrer COM-Komponente vor. Sie können 'sn -v' verwenden (oder ist es' -V'?), Um Ihre Unterschrift zu verifizieren, aber unter dem Strich gibt es irgendwo einen Fehler, der den Authenticode-Signaturfehler sagt, wenn das das Problem ist. Und holen Sie ProcMon und DbgView auf den Fall. Wenn Sie weitere Details re genaue Fehlermeldungen usw., kein Schaden, um das Detail hier hinzufügen –