2008-09-24 7 views
8

Ich rufe eine Nicht-.NET-DLL aus meinem Projekt mit P/Invoke an, was bedeutet, dass die .dll immer im Verzeichnis der .exe vorhanden sein muss.Angeben einer Nicht-.NET-Abhängigkeit in Visual Studio

Gibt es eine Möglichkeit, Visual Studio von dieser Abhängigkeit zu informieren, so dass es beim Kompilieren die DLL automatisch in das Ausgabeverzeichnis kopiert und automatisch die DLL in das Setup aufnimmt? Oder muss ich das manuell machen?

Antwort

5

Sie können diese Datei (en) kopieren und mit dem Projekt verknüpfen und in den Eigenschaftenfenstern "Build Action" auf "None" und "Copy to Output Directory" auf "Copy if neuer" oder "Copy always" setzen.

Oder Sie können eine "Pre-Build-Ereignisse" & "Post-Build-Ereignisse", wo Sie beliebige Batch-Skripts angeben können.

Ich bevorzuge die zweite Option, weil dieser Weg flexibler ist als der erste.

Sie können auch eine MSBuild-Datei ändern und eine Aufgabe zum Kopieren der Datei (en) hinzufügen.

+0

Danke, die erste Option ist, was ich tat - fragte mich, ob es einen besseren Weg gab – Grokys

8

Sie können die .DLL einfach zu Ihrem Projekt hinzufügen.

Wählen Sie den Properties Bereich für diese Datei und legen Build Action zu Content und Copy to Output Directory zu Copy if newer.

+0

Build Action = "Inhalt" ist besser als Build Action = "None" in einer anderen Antwort vorgeschlagen. Dies liegt daran, dass Sie einfach "Content" -Dateien in ein Setup-Projekt einfügen können. – Joe

+0

Ja, und genau deshalb habe ich das in meiner Antwort vorgeschlagen. –

+0

> das ist genau warum schlug ich das in meiner Antwort Und warum ich upvoted Ihre Antwort :) – Joe

2

Ich denke, ein Problem mit nur Hinzufügen einer .DLL zum Projekt ist, dass Sie möglicherweise verschiedene Versionen einer DLL für Debug und Release-Builds benötigen. Sie würden denken, Sie können der Datei sowohl Debug- als auch Release-Versionen der DLL hinzufügen und basierend auf Konfigurationen die unangemessene ausschließen, aber ich konnte keinen Weg finden, dies zu tun. Ich benutze Visual Studio 2010. Ich bin mir sicher, dass dies in den alten Tagen mit VS6 funktioniert hat.

+0

Sie können die .csproj-Datei manuell bearbeiten So fügen Sie dem Inhaltsknoten der DLL eine Bedingung hinzu: Alternativ können Sie einen Pre-Build-Schritt verwenden, um entweder MyDLL zu kopieren. Debug.dll oder MyDLL.Release.dll zu MyDLL.dll abhängig von der aktuellen Konfiguration. (Ich denke, dass Sie in der Lage sein sollten, dies über die Projekteigenschaftenseite in VS zu tun, indem Sie von Debug zu Release wechseln) – bruceboughton

+0

Hier beantwortet http://stackoverflow.com/a/33436918/1889784 –

Verwandte Themen