如何在clickonce中将子文件夹指定为项目DLL的目标?

时间:2017-04-11 06:23:00

标签: deployment prism clickonce

我们有一个带棱镜的WPF项目。我们正在动态加载一些模块,这些模块基本上放在子文件夹中(PrismModules)。

应用程序工作正常,但现在如果我们尝试使用ClickOnce部署它,它会忽略输出路径结构并将所有内容放在根文件夹而不是我们的" PrismModules"子文件夹。然后应用程序不会加载这些模块。

这是ClickOnce部署的限制吗?

修改

为了提供更多信息,以下是解决方案的结构:

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

它们都构建在同一个根目录中,模块A / B / C就在子文件夹PrismModules中。

WpfClient不会引用任何模块,它会在运行时扫描文件夹PrismModules并加载包含IModule实现的所有Dll。

我注意到了什么:

引用的某些DLL放在根目录上(而不是PrismModules文件夹中),而且只有动态加载的DLL甚至不存在(我们无法在ClickOnce菜单中为它们设置任何内容。

1 个答案:

答案 0 :(得分:0)

在您的主项目(由ClickOnce部署)中,创建一个子文件夹PrismModules,并将模块的dll添加为链接。将“Bu​​ildAction”设置为“内容”,将“复制到输出目录”设置为“始终复制”。

在WpfClient下创建一个子文件夹PrismModules并添加链接到它。从输出位置获取dll(无论ModuleA的输出位置是什么,......)

进行额外检查:在Deploy / Application Files下,添加的dll应标记为“Included”而不是“Data Files”。通常VS会这样做。

正确设置解决方案的构建顺序:WpfClient应该依赖于您的模块X,这样您就无法使用旧的dll部署新版本的应用程序。

步骤一步:

构建所有项目(在发布中)。

站在WpfClient上,右键单击选择“添加新文件夹”,将其命名为PrismModules。

站在新创建的PrismModules上,右键单击选择“添加现有项”。导航到您构建的模块dll,无论它位于何处。而不是“添加”,按“添加为链接”(注意“添加”右侧的三角形)。