2017-04-11 44 views
0

我們有一個帶有棱鏡的WPF項目。我們正在動態加載一些模塊,這些模塊基本上放在一個子文件夾(PrismModules)中。如何在clickonce中指定一個子文件夾作爲項目DLL的目的地?

該應用程序工作正常,但現在如果我們嘗試使用ClickOnce部署它,它會忽略輸出路徑結構並將所有內容放在根文件夾中而不是我們的「PrismModules」子文件夾中。然後應用程序不會加載這些模塊。

這是ClickOnce部署的限制?

編輯

給一點位的更多信息,這裏是怎麼構成的解決方案:

Solution 
- WpfClient 
- PrismModules 
    - Module A 
    - Module B 
    - Module C 

它們都建立在相同的根目錄,模塊A/B/C只是在子文件夾PrismModules中。

WpfClient不引用任何模塊,它會在運行時掃描文件夾PrismModules並加載包含IModule實現的所有Dll。

我也注意到:

一些DLL被引用都放在根目錄(而不是PrismModules文件夾中),和只有動態加載的,甚至不存在(我們不能爲任何事情他們在ClickOnce的菜單。

回答

0

在您的主項目(通過的ClickOnce部署)創建子文件夾PrismModules,並添加到它的DLL你的模塊作爲鏈接。設置「BuildAction的」內容和「複製到輸出目錄「爲 」一直拷貝「。

克雷亞在WpfClient下的子文件夾PrismModules中添加指向它的鏈接。從他們的輸出位置(無論是ModuleA的輸出位置,...)

進行額外的檢查:在部署/應用程序文件下,那些添加的dll應標記爲「包含」而不是「數據文件」。通常VS做對了。您的解決方案正確

設置構建順序:WpfClient應該取決於你的模塊X,讓你無法部署應用程序與舊的DLL的新版本。

步驟一步:

構建所有項目(在發行)。

站在WpfClient,右鍵單擊選擇「添加新文件夾」,將其命名爲PrismModules。

站在新創建PrismModules,右鍵單擊選擇「添加現有項」。導航到您創建的模塊DLL,無論它在哪裏。按「添加爲鏈接」(注意「添加」右側的三角形),而不是「添加」。

+0

但我的DLL是那些剛剛建立了這個目錄 – J4N

+0

在不明白你的項目結構的項目。你可以解釋嗎? – dvorn

+0

我不明白:如果我更新我的DLL,這意味着我必須再次複製它們?它會在調試中起作用嗎? – J4N

相關問題