2010-11-26 40 views
0


我正在開發一個在C#中使用外部C + + DLL COM組件在GUI中的DLL,也用於代碼端。總的來說,我使用了3個其他組件,對於每個參考,我都會得到輸出中包含的「Interop.ComponentName.dll」文件。C#DLL刪除Interop和AxInterop文件

我曾嘗試將「屬性」窗口中的「複製本地」設置更改爲false,但在運行時出現主DLL無法找到文件的錯誤。

我知道這些是程序運行所需要的,但是有可能在子目錄中使用這些文件,比如主DLL在「」../extras/Test.dll「中,我希望Interop在 「../extras/TestResources/」 文件

額外的信息:我使用C#和Visual Studio 2008在Windows XP SP3

感謝,K.

回答

0

哪些互操作的DLL文件是你引用?如果它們是非標準的(即不包括在你的目標.NET框架發行版中),那麼Visual Studio可能會將它們包含在你的項目輸出中,因爲它們不是註冊在您的全局程序集緩存中。

請考慮分佈式C#應用程序如何引用外部DLL。如果它們是.NET發行版的一部分,那麼它們已在用戶的GAC中正確註冊。否則,您的安裝/部署項目將註冊它們。如果是後者,那麼如果您轉到原始項目的屬性,請在「構建」下,看到輸出路徑字段。 Visual Studio的內部構建實用程序將只允許您將項目的構建文件輸出到單個目錄。

但是,有一種方法可以實現你所要求的。它比允許Visual Studio處理你的部署要複雜得多。查看MSBuild.exe並構建腳本。

+0

他們是非標準的,一對夫婦我已經和一對夫婦(用於GUI)由其他人構建,我無法訪問重建。基本上我正在使用的DLL文件位於相同的目錄或父目錄中。我會繼續關注它,謝謝。 – 2010-11-26 16:41:30

0

要使CLR能夠找到不在bin文件夾或其他自動搜索位置的程序集,可以在app.config文件中使用< codeBase>元素。

有關如何執行此操作的詳細信息,請參見http://msdn.microsoft.com/en-us/library/efs781xb(vs.71).aspx

2線供您鏈接的文章指出:

  • 如果組件是私有程序集,代碼庫的設置必須相對於應用程序的目錄的路徑。

  • 對於沒有強名稱組件版本被忽略,並且加載程序使用<代碼庫的第一次亮相>內< dependentAssembly>