2008-12-12 50 views
2

我有一個從ClickOnce使用System.Addins API惱人的生成過程。使用System.Addins需要特定的目錄結構,而主項目不直接引用適配器,視圖和合約,這與ClickOnce架構不兼容。System.Addin和ClickOnce

構建過程令人討厭的部分是,我必須通過構建後事件將插件組件中的.dll文件複製到主應用程序項目的目錄中,然後從主項目手動引用這些文件,這樣ClickOnce將包含它們。首先,這需要2次構建才能正確構建,其次,它會干擾源代碼管理(我必須從源代碼管理中排除複製的加載項dll文件,或者對它們所做的任何更改都需要結帳)。

所以,我的問題是,有沒有辦法解決這個黑客?更優雅的東西?

回答

-1

ClickOnce不讓你安裝你想要的軟件。它會在文檔和設置中安裝二進制文件和dll。您可以在您的項目屬性中進入「發佈」選項卡,然後選擇「應用程序文件」以選擇要包括的其他文件。如果System.Addings需要特定文件夾相對於您的程序集的dll,那麼您可以在項目中創建文件夾,並從這裏包含dll。這可能有效。如果沒有,我沒有「黑客」或其他解決方案,clickonce是偉大的,但有限的功能。

0

感謝您的輸入,我現在按照您提及的方式進行操作;在我的項目中創建文件夾,幷包含我需要的dll。它可以工作,但這是一個醜陋的解決方案,它會干擾源代碼管理。

我意識到ClickOnce的侷限性,我希望能有辦法解決它。例如,我讀過某處可以使用部署項目來創建特定結構中所需的適當依賴關係。這個問題一旦部署給公衆,就沒有簡單的方法(在ClickOnce中)來更新這些依賴關係。

+0

由於帖子順序不保證保持不變(基於上下投票重新排序),您對Daok的回覆將更好地作爲對他帖子的評論而不是新帖子。 沒有試圖批判,只想幫助新手:)。 – codeConcussion 2008-12-30 14:18:21

3

我無法完全回答您的問題,但看起來您正在通過Visual Studio創建ClickOnce部署。我會拋棄該方法並改用MageUI。這是一個獨立的可執行文件,可以在框架SDK中找到,它將生成您的應用程序和部署清單文件。它帶有一個gui版本(mageui.exe)和一個命令行版本(mage.exe)。

法師可能無法擺脫您的構建後事件,但它應該不必去引用文件以使ClickOnce查看它們。

0

我使用的解決方案是爲所有項目都有一個輸出文件夾。每個項目都將自己的文件放在正確的子文件夾中。應用程序引導程序項目將他的dll也放在輸出(根)文件夾中。然後,當您爲引導程序創建點擊一次時,它將從輸出文件夾中獲取所有內容。

最難的部分是通過將管道組件作爲內容納入主要解決結構真正得到在正確的地方所有的dll的(並有每個DLL只有一次)

0

我解決了這個問題。

爲此,請將輸出文件夾從(/ bin/debug/bin/Release)更改爲其他內容。我用../lib,否則你會得到一個Visual Studio不能引用這個文件的錯誤。

在你的主要解決方案創建的管道文件夾

  • \ AddInSideAdapters
  • \ AddInViews
  • \合同
  • \ HostSideAdapters

右鍵單擊每個文件夾和點擊「添加現有項目」更改以查看所有文件,然後瀏覽到您的../lib(或任何具有輸出的地方等等),然後拉下添加按鈕(點擊向下箭頭)並點擊「添加爲鏈接」。

右鍵單擊每個文件並將其設置爲「內容」。

這將創建一個指向您的程序集的刷新文件,它們將被包含在clickonce清單中。