2008-09-09 11 views
1

Gibt es eine Möglichkeit, alle erforderlichen Assemblys (mit Ausnahme des .NET-Frameworks) für ein .net-Projekt in einen Ordner zu importieren, der als Setupdatei in eine nsis gepackt werden kann?Abrufen einer Liste der von der Anwendung benötigten Assemblys

Ich habe versucht, eine kleine Konsole App zu schreiben, die Reflektion verwendet, um eine Liste von DLLs zu bekommen, aber stecken geblieben mit der Suche nach einem idiotensicheren Weg zu bestimmen, ob eine DLL aus dem .net Framework ist oder nicht.

Die Antwort könnte ein einfacher Wechsel in Visual Studio sein, um alle Abhängigkeiten auszugeben, oder eine eigenständige Anwendung, die es kann, oder ein Plugin für NSIS, oder einige Informationen über Reflektion, die ich verpasst habe.

+0

In Bezug auf die idiotensichere Art zu bestimmen, ob eine DLL aus dem .NET-Framework stammt oder nicht, ist die Verwendung der Codebase-Eigenschaft des Assembly-Objekts, das für mscorlib "C: \ WINDOWS \ Microsoft .NET Framework, jedoch nicht für alle .net Framework-Assemblies –

+0

Sie möchten vorsichtig sein, je nachdem, für was Ihr NSIS-Installer ist.Sie ​​könnten feststellen, dass Sie versehentlich eine DLL in Ihr Installationsprogramm aufgenommen haben, die Sie nicht verwenden Keine Lizenz zum Weiterverteilen –

Antwort

1

In Visual Studio (mindestens 2005 - was ich gerade benutze) hat jede Referenz, die Sie einem Projekt zugeordnet haben, eine Eigenschaft namens "Copy Local", dies kann auf true/false gesetzt werden. Wenn es wahr ist, kopiert es die DLLs für Sie in das aktuelle Konfigurationsverzeichnis.

0

Dependency Walker ist, was Sie brauchen. Oder vielleicht Depends.Net

+1

Dependency Walker löst keine Assemblyverweise auf (siehe http://www.dependencywalker.com/faq.html) –

1

Sie können dafür NDepend verwenden. Laden Sie es herunter, erstellen Sie ein neues NDepend-Projekt, ziehen Sie &, und lassen Sie Ihre Assemblys in der Datenansicht der Anwendungsassemblys fallen. Daraufhin wird NDepend sofort die von den Anwendungsassemblys benötigten Ebenenassemblys auflösen.

Sie können auch eine Liste von Ordnern angeben, um NDepend mitzuteilen, wo Sie suchen müssen. Wenn eine Tier-Assembly nicht gefunden werden kann, markiert NDepend sie als nicht gefunden, was ich für eine wertvolle Information halte.