3 Stimmen

Entfernen von stark signierten Teilen aus der Baugruppe

Ich habe Probleme mit dem Bau einiger Projekte. bitte betrachten Sie dieses Szenario:

  1. Ich habe 2 Projekte, zum Beispiel A und B.
  2. es gibt einen Verweis von A nach B
  3. Das Projekt von B wurde stark signiert (ich wollte aus bestimmten Gründen nicht, dass es signiert wird, also habe ich beschlossen, das Kontrollkästchen "Baugruppe signieren" zu entfernen)
  4. gab es eine Code-Zeile in AssemblyInfo.cs Datei im A-Projekt sagt:

    [assembly: InternalsVisibleTo("B,publicKey=0024......")]

    Ich habe es geändert in:

    [assembly: InternalsVisibleTo("B")]

    Wenn ich nun eine der folgenden Dateien kompiliere Projekte kompiliere, wird ein Fehler angezeigt, der besagt:

Die Referenz der Freundesgruppe 'B' ist ungültig. Strong-name signierte Assemblies müssen einen öffentlichen Schlüssel in ihren InternalsVisibleTo-Deklarationen angeben.

Meine Frage ist hier: wie Compiler wissen, dass es eine signierte Assembly irgendwann war? und wie kann ich vollständig entfernen stark signiert aus Assembly von B und schließlich bauen sie richtig?

bearbeitet: Nebenbei bemerkt Bitte beachten Sie, dass beide Themen nicht stark signiert sind, da ich beide Kontrollkästchen "sign the assembly" aus den Projekteigenschaften entfernt habe.


Wenn ich den Namen der Baugruppe auf einen falschen Namen wie "bla_bla_bla" änderte, der nicht einmal existiert, ist der Fehler derselbe!
[assembly: InternalsVisibleTo("bla_bla_bla")]
Ich glaube, dass diese Theorie wahr ist:
in der Tat B Projekt nicht kompiliert, und wenn es nicht finden, die übereinstimmende kompilierten Projektnamen (beim Bau von Projekt A), Compiler vermuten, dass B Projekt stark mit dem öffentlichen Schlüssel, dass der Entwickler nicht zur Verfügung gestellt hat es signiert! und schließlich wird es so seltsam Fehler prompt!
aus dem Grund der B hat einen Verweis auf A, wenn ich B-Projekt kompilieren, wird es kompilieren es Bezug zuerst (A-Projekt) und wieder Compiler wird mich auffordern, dass Fehler (wie das gleiche als wenn ich Projekt A kompilieren)
aber entweder ist es nicht wahr oder etwas ist falsch mit meinem Projekt A., weil ich zwei neue einfache Projekte von Grund auf neu starten und alles geht gut ohne Fehler (auch wenn ich ändern [Assembly:...] Anweisung auf die ungültige Assembly-Namen) ich komplett abgestürzt

6voto

Brett Punkte 61

Ich hatte das gleiche Problem, und durch Entfernen der folgenden Zeilen konnte ich es beheben:

[Assembly: AssemblyDelaySign(false)]
[Montage: AssemblyKeyName("")]

4voto

Rzassar Punkte 1748

Oh mein Gott! Ich muss diese Codezeile entfernen:
[assembly: AssemblyKeyName("")]
so dass ProjektA die Unterzeichnung des Projekts völlig vergisst und sein einfaches Leben fortsetzt
wie Sie wissen, wenn die Ziel-Assembly signiert wurde, muss die referenzierte Assembly ebenfalls signiert sein. Tatsächlich erinnert diese Codezeile den Compiler daran, dass dieses Projekt signiert ist. daher sollte die Ziel-Assembly ebenfalls signiert sein. daher beschwert sich der Compiler darüber, dass die Friend-Assembly kein " , publicKey=..."-Token enthält.

3voto

Frédéric Hamidi Punkte 249635

Der Compiler weiß nicht, dass B wurde zuvor stark benannt.

Sie weiß jedoch, dass A ist stark benannt. Aus Sicherheitsgründen können Sie die Interna einer stark benannten Baugruppe nur einer anderen stark benannten Baugruppe zugänglich machen.

2voto

sliderhouserules Punkte 3317

Wenn keine Ihrer Baugruppen signiert ist und Sie den Fehler erhalten, und Sie haben die zuvor erwähnten Zeilen in Ihrer AssemblyInfo-Datei, dann können sie der Übeltäter sein.

Aber wie JoeGeeky bereits erwähnt hat, müssen Sie die ambos dieser Zeilen aus Ihrer AssemblyInfo-Datei, damit der Compiler sie nicht mehr für eine signierte Assembly hält:

// both/either cause compiler to think assembly is signed
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]

Dieser wird también verursachen das gleiche Problem (beachten Sie die true ):

// also causes compiler to think assembly is signed
[assembly: AssemblyDelaySign(true)]

Wenn es jedoch auf false dann ist es nicht den Fehler auslösen (aber wenn Sie ihn dort haben, können Sie ihn auch entfernen).

// does not cause compiler to think assembly is signed
[assembly: AssemblyDelaySign(false)]

0voto

Vani Kulkarni Punkte 31
[assembly: AssemblyDelaySign(false)]

//[assembly: AssemblyKeyFile("")]
//[assembly: AssemblyKeyName("")] 

Das Auskommentieren von 2 Zeilen hat das Problem für mich gelöst

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X