2010-11-26 11 views
0


Ich entwickle eine DLL in C#, die externe C++ DLL COM-Komponenten in der GUI und auch für die Codepage verwendet. Insgesamt benutze ich 3 andere Komponenten und für jede referenziere ich eine "Interop.ComponentName.dll" Datei in der Ausgabe enthalten.C# DLL entfernen Interop- und AxInterop-Dateien

Ich habe versucht, die Einstellung "Copy Local" im Fenster "Properties" zu false zu ändern, aber ich bekomme zur Laufzeit Fehler, dass die Haupt-DLL die Dateien nicht finden kann.

Ich verstehe, dass diese für das Programm benötigt werden, aber ist es möglich, diese Dateien in einem Unterverzeichnis zu verwenden, wie die Haupt-DLL in "" ../extras/Test.dll "und ich möchte das Interop Dateien in "../extras/TestResources/"

Geschichte:?. ich bin C# mit Visual Studio 2008 in Windows XP SP3

Danke, K.

Antwort

0

mit welchen Interop-DLLs sind Sie Referenzieren Wenn sie nicht standardisiert sind (dh nicht in Ihrer .NET Framework-Zieldistribution enthalten sind), kann Visual Studio sie in Ihre Projektausgabe aufnehmen, wie sie nicht sind in Ihrem globalen Assemblycache registriert.

Überlegen Sie, wie Ihre verteilte C# -Anwendung auf externe DLLs verweisen würde. Wenn sie Teil der .NET-Distribution sind, sind sie ordnungsgemäß im GAC des Benutzers registriert. Andernfalls würde Ihr Setup/Deployment-Projekt sie registrieren. Wenn es Letzteres ist, sollten Sie, wenn Sie zu den Eigenschaften Ihres ursprünglichen Projekts gehen, unter Build das Ausgabepfadfeld sehen. Mit dem internen Build-Dienstprogramm von Visual Studio können Sie die Builddateien Ihres Projekts nur in einem einzigen Verzeichnis ausgeben.

Es gibt jedoch einen Weg zu erreichen, was Sie fragen. Es ist ein wenig komplizierter, als Visual Studio die Bereitstellung zu überlassen. Sehen Sie in MSBuild.exe nach und erstellen Sie Skripts.

+0

Sie Nicht-Standard sind, ein paar die ich gemacht habe und ein paar (für die GUI) werden von anderen erstellt und ich habe keinen Zugriff auf den Wiederaufbau. Grundsätzlich befinden sich die DLL-Dateien, die ich verwende, im selben Verzeichnis oder übergeordneten Verzeichnis. Ich werde weiter nachdenken, danke. –

0

Damit die CLR Assemblys finden kann, die sich nicht in Ihrem bin-Ordner oder den anderen automatisch durchsuchenden Speicherorten befinden, können Sie das codeBase> -Element < in Ihrer app.config-Datei verwenden.

Einzelheiten hierzu finden Sie unter http://msdn.microsoft.com/en-us/library/efs781xb(vs.71).aspx.

2 Zeilen für Sie aus dem verlinkten Artikel zu beachten:

  • Wenn die Montage ist eine private Montage muss der Code-Basis-Einstellung ein Pfad relativ zum Verzeichnis der Anwendung sein.

  • Bei Baugruppen ohne einen starken Namen, wird Version ignoriert und der Lader verwendet das erste Auftreten von < Code-Basis> innen < dependentAssembly>

Verwandte Themen