2012-10-25 4 views
6
referenziert

Ich habe ein Projekt, das als Wrapper für eine 3rd Party .exe (es hat statische Methoden, um die Befehlszeile zu erstellen und führen Sie die ausführbar). Ich möchte es in mindestens ein paar Projekten in meiner Lösung verwenden. Idealerweise sollte die .exe nur in diesem Wrapper-Projekt vorhanden sein (ich möchte es nicht jedem Projekt hinzufügen, das es verwendet). Im Moment versuche ich, dies mit einem Webprojekt (.NET MVC) auf IIS 7 zu arbeiten, aber wenn ich verwende, um das Verzeichnis zu sehen, von dem mein Wrapper aufgerufen wird, bin ich in einem Ordner wieSo kopieren Sie Nicht-Code-Dateien mit dem kompilierten Projekt, wenn von einem anderen Projekt in C#

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ "mein Projekt" \ 65a016fb \ ac5f20a7 \ assembly \ dl3 \ d8de0f10 \ 06e277a2_55b2cd01

und mein 3. Party .exe ist nirgendwo zu finden. Ist es möglich, Dateien mit einer Referenz zu kopieren, die nicht kompiliert werden?

BTW, habe ich die „um Ausgabeverzeichnis kopieren“ und „Build-Aktion“ Eigenschaften meiner .exe „Copy immer“ und „Inhalt“/„Ressource“/"Eingebettete Ressource " ohne Erfolg bisher.

+0

OK, '.Location()' gibt diesen seltsamen Pfad zurück, aber was sagt 'Environment.CurrentDirectory'? – AgentFire

+0

CWD war in C: \ Windows \ System32, wenn ich mich erinnere. – DannyH

+0

Ist Ihre Drittanbieter-EXE dort? – AgentFire

Antwort

1

Versuchen Sie, in Ihren Projekten, die Ihren Wrapper verwenden, eine vorhandene Datei hinzuzufügen. Wenn das Dialogfeld angezeigt wird, dies zu tun:

http://wiki.oxygenelanguage.com/en-w/images/0/0d/AddAsLinkAero.png

Entweder das, oder ziehen notwendigen Dateien, um Ihre Projekte aus der verpackt mit Alt holded.

Das wird die Dateien als Links hinzufügen. Links sind eine gute Wahl für Wiederverwendung, wenn die Originaldateien an dem einzigen Ort lokalisiert werden müssen.

Hinzufügen von Dateien als Links in Verbindung mit der Einstellung zu diesem Links Build-Aktion zu Content und Copy always auf die Option, sie in das Ausgabeverzeichnis kopieren, sollte für Ihre arbeiten.

+0

Danke für die Idee, aber leider funktioniert das nicht für mich - die .exe erscheint immer noch nicht in meinem 'Temporary ASP.NET Files' Verzeichnis/Unterverzeichnis. Ich habe sichergestellt, dass die Eigenschaften der verknüpften Datei zu "Build Action" = "Inhalt" und "Kopieren nach Ausgabeverzeichnis" = "Immer" geändert werden. Ich beginne zu denken, dass dies eine Änderung ist, die ich in IIS machen muss, damit die Datei in das temporäre Verzeichnis verschoben wird. – DannyH

0

Wenn jemand in dieses Problem läuft, ist hier, wie ich um ihn bekam:

  • Fügen Sie die EXE-Datei in Ihrem Projekt Ressourcen (Rechtsklick auf das Projekt, Eigenschaften -> Ressourcen, fügen Sie Datei und geben es ist ein Ressourcenname)
  • Sie können nun Ihre .exe als byte[] zugreifen (zumindest wenn man auf eine dll) mit Properties.Resources.*NameYouGaveYourResource*
  • Bevor Sie Ihre EXE-Gebäude sind, File.Exists() verwenden zu überprüfen, ob die Datei vorhanden ist in Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) (oder Sie c ein legte die exe, wo Sie die Methode verwenden möchten, oben bekommt man Verzeichnis die DLL in ist) - wenn nicht, schreiben Sie die Datei:

mit (Filestream filestream = new Filestream (Path.GetDirectoryName (Assembly.GetExecutingAssembly(). Speicherort) + "\ EXE.exe", FileMode.CreateNew)) { fileStream.Write (Properties.Resources. NameYouGaveYourResource, 0,> Properties.Resources. NameYouGaveYourResource.Länge); }

Jetzt können Sie die exe leicht als Process verwenden. Ziemlich weit von ideal, aber es bedeutet, dass die exe Ihre .dll begleitet, wohin es geht.

Verwandte Themen