2011-01-10 8 views
6

Ich verwende einige Win32-DLLs in einem Outlook 2007-Add-In.Outlook 2007 Addin C# - Startpfad

Also habe ich die DLLs mit Build-Aktion "Inhalt" hinzugefügt und in das lokale Verzeichnis kopieren.

Um den Pfad zu ihnen zu bekommen, würde ich normalerweise verwenden:

Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "MyDll.dll"); 

Wenn von Clickonce veröffentlicht, Assembly.GetExecutingAssembly mich nicht den Standardpfad für alle meine Dateien Clickonce zu geben. Meine Dateien sind in % appdata% .. \ Lokale \ Apps \ 2.0, aber die Baugruppe ist in % appdata% .. \ Local \ Assembly.

Gibt es eine bessere Möglichkeit, den Pfad zu diesen DLLs aus einem von ClickOnce bereitgestellten Outlook-Add-In abzurufen?

+0

versuchte auch Application.StartupPath, aber das gibt mir den Pfad zu Outlook-exe. – jonathanpeppers

Antwort

2

Dieser Code gibt mir den richtigen Weg jetzt:

string path = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "MyDll.dll"); 

ich je hatte SetupInformation zu verwenden, wenn Befehlszeilenargumente Parsen, und einige Debug führten mich zu dieser Eigenschaft.

Ich poste zurück, wenn es mir irgendwelche Probleme gibt, wie wir auf mehreren Maschinen installieren müssen und sehen, was passiert.

+0

Verwenden Sie ein Setup-Projekt, um dieses bereitzustellen? Sie können einen Ordner im Dateisystem angeben und die Pfade direkt angeben. – bdwakefield

+0

Es ist ClickOnce, heißt es in meiner Frage. – jonathanpeppers

0

Haben Sie versucht, sie als Referenz hinzuzufügen? Ich glaube, dass das Add-In den Standort kennen sollte, wenn Sie es auf diese Weise setzen. Sehen Sie sich einfach an, wie Office Interops (und andere Referenzen) beim Hinzufügen behandelt werden - Sie müssen sie nicht angeben, sondern nur in Ihrem Code.

+0

Das sind .Net-Referenzen. Sie können dies nicht mit Win32-DLLs tun. – jonathanpeppers

+0

Immer noch ein Neuling auf C# -Programmierung. Das erste, was mir in den Sinn kam. –

1

Ich denke, das ist genau das, wonach Sie suchen - wie Sie die DLLs finden, die Sie mit Ihrer VSTO-Anwendung bereitgestellt haben.

http://robindotnet.wordpress.com/2010/07/11/how-do-i-programmatically-find-the-deployed-files-for-a-vsto-add-in/

+0

Dies funktioniert genauso wie meine angenommene Antwort, basiert aber auf Assembly.GetExecutingAssembly(), also glaube ich, dass ich die akzeptierte Antwort bevorzuge. – jonathanpeppers

+0

Was für dich funktioniert, Alter. Nur zur Info: Ich habe diese Antwort von der ClickOnce-Produktteamleitung erhalten. – RobinDotNet