17 Stimmen

Nant schlägt fehl mit schlechten Berechtigungen auf dem Build-Server

Eine Frage für totale Neulinge. Ich versuche, ein Nant-Skript auf einem Build-Server auszuführen (ein sehr einfaches Skript, das nichts tut), und es schlägt mit der folgenden Fehlermeldung fehl

System.Security.SecurityException: Anforderung der Berechtigung vom Typ 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' fehlgeschlagen.

Was muss ich tun, um ihn zum Laufen zu bringen?

28voto

DanielLarsenNZ Punkte 859

In meiner Fehlermeldung wurde die "Internet-Zone" erwähnt. Das liegt wahrscheinlich daran, dass ich gezippte Binärdateien von SourceForge heruntergeladen habe. Ich habe gezippt und dann entpackt, um die Zone zu entfernen, und das hat bei mir gut funktioniert.

Unter Windows 7 (oder ähnlich):

  1. Alle Dateien im Ordner NAnt auswählen
  2. Rechtsklick, Senden an > Komprimierter (gezippter) Ordner
  3. Klicken Sie mit der rechten Maustaste auf die neue Zip-Datei und wählen Sie "Alle extrahieren".
  4. In einen neuen Ordner extrahieren

Die extrahierten Dateien befinden sich dann nicht mehr in der "Internet-Zone". Wenn Sie möchten, können Sie sie in das ursprüngliche Verzeichnis zurückkopieren.

16voto

Zeinrich Punkte 286

Ich glaube, @TK hat hier die Antwort, obwohl es vielleicht nicht so einfach ist, ob nant von einem Netzlaufwerk aus läuft oder nicht.

Ich habe ein ähnliches Problem wie @Aidan gehabt. Es stellte sich heraus, dass ich die nantcontrib (v .86)-Baugruppen so auf mein Build-System kopiert hatte, dass Windows 7 den Zugriff auf die nantcontrib-Baugruppen einschränkte. Um das Problem zu beheben, kopierte ich zunächst die nantcontrib-Zip-Datei auf meine Build-VM und überschrieb dann die blockierten Assemblies mit dem Inhalt der Zip-Datei. Windows 7 erkannte, dass die Dateien vom lokalen System stammten (und nicht von einer nicht vertrauenswürdigen Quelle, von der ich sie ursprünglich kopiert hatte), und hob die Blockierung der Baugruppen auf.

Es gibt wahrscheinlich einen direkteren Weg, um den Baugruppen zu vertrauen (z. B. @TKs Link), aber bei mir hat das funktioniert.

Wenn dieser Fehler erneut auftritt, sollten Sie auf zwei Dinge achten:

Erstens: Nant (v .91 alpha 2) meldet genau, was der Fehler ist. Ich sah den gleichen Fehler wie @Adian, zusammen mit einem vollständigen Fehlerstapel und schließlich diese Informationen (Hervorhebung von mir):

Die fehlgeschlagene Assembly oder AppDomain war: NAnt.Contrib.Tasks, Version=0.86.3319.0, Culture=neutral, PublicKeyToken=null Die Methode die den Fehler verursacht hat, war: NAnt.Core.Task CreateChildTask(System.Xml.XmlNode)
Die Zone der Versammlung, die fehlgeschlagen ist: Internet
Die Url der fehlgeschlagenen Baugruppe war: Datei:///C:/Programmdateien (x86)/NAntBuilder 2/nantcontrib/bin/NAnt.Contrib.Tasks.dll

Zweitens: Sehen Sie sich die Eigenschaftsseite der betreffenden Assembly (in meinem Fall Nant.Contrib.Tasks.dll) an. Wenn die Datei aus einer nicht vertrauenswürdigen Quelle kopiert wurde, finden Sie im Eigenschaftenbereich (unter Erweitert...) eine Schaltfläche "Freigabe" sowie einen Hinweis, dass die Dateien aus einer nicht vertrauenswürdigen Quelle stammen.

7voto

Erhhung Punkte 911

Dieses Problem wird dadurch verursacht, dass Windows die Dateien "Zone.Identifier" Metadaten in NTFS auf "Internet" (oder auf eine andere Zone, die Sie explizit freigeben müssen, um Zugriff zu erhalten).

Um zu verhindern, dass beim Kopieren von Dateien oder, wie in meinem Fall, beim Entpacken einer Zip-Datei auf einem Netzlaufwerk Metadaten zur Dateisicherheit geschrieben werden, kopieren Sie die Zip-Datei entweder in einen lokalen Ordner, bevor Sie sie entpacken, wie zuvor vorgeschlagen, oder führen Sie das Programm "streams.exe" Tool von Sysinternals, um diese Metadaten zu entfernen.

Zum Beispiel, wenn ich streams.exe auf exe's in meinem Downloads-Ordner:

streams.exe *.exe

Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com

C:\Downloads\jre-6u27-windows-x64.exe:
   :Zone.Identifier:$DATA       26

Normalerweise, streams.exe würde keine Metadateninformationen anzeigen, wenn die Dateien alle aus einem lokalen Ordner stammten. Wenn Sie diese sehen ":Zone.Identifier:$DATA" Metadaten (die in NTFS als alternativer Datenstrom gespeichert sind), dann sollten Sie im Dialogfeld Eigenschaften der Dateien auch eine Schaltfläche Freigeben sehen.

Um die Dateien in großen Mengen freizugeben, führen Sie "streams.exe -s -d *.*" aus Ihrem problematischen Ordner.

2voto

lumayara Punkte 372

Wenn du NAnt herunterlädst, musst du mit der rechten Maustaste auf die Zip-Datei klicken (bevor du alles entpackst), dann auf Eigenschaften und dann auf Datei entsperren. Dann entpacken Sie alles und es wird funktionieren.

0voto

TK. Punkte 44387

Führen Sie das Nant-Skript auf einem freigegebenen Netzlaufwerk aus?

Wenn dies der Fall ist, müssen Sie möglicherweise die .NET-Caspol-Richtlinie so konfigurieren, dass .NET-Code auf einer Netzwerkfreigabe ausgeführt werden kann.

Mit CasPol einer Aktie volles Vertrauen schenken

Dieser Link könnte Ihnen weiterhelfen.

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