VS2015构建后配置WPF程序至不同目录并实现正常调用
问题描述
我有一个包含3个项目的解决方案:2个WPF应用程序(WPF_A和WPF_B)以及1个类库。工作目录结构如下:
PARAM(包含.sln文件) ├── PROJECT A(包含WPF_A和WPF_B) └── CC(包含类库)
WPF_A通过以下代码调用WPF_B:
private void button_Click(object sender, RoutedEventArgs e) { var newform = new WPF_B.MainWindow(); newform.Show(); }
在Visual Studio 2015中运行WPF_A时该调用正常生效,但Release构建后希望实现以下目录结构:
WPF_A ├── CC │ └── Library.dll └── PROJECT_B └── WPF_B.exe
目前已能构建出该目录结构,但WPF_A无法调用不在同一目录下的WPF_B,请问如何配置项目以实现目标目录结构并保证调用正常?
解决方案
1. 配置项目输出路径
先调整WPF_B和类库的输出路径,确保构建后文件自动进入目标目录:
- 右键WPF_B项目 → 属性 → 生成 → 输出路径,设置为
$(SolutionDir)WPF_A\PROJECT_B\WPF_B\(根据实际SolutionDir路径微调,确保最终输出到目标子目录) - 右键类库项目 → 属性 → 生成 → 输出路径,设置为
$(SolutionDir)WPF_A\CC\
2. 添加程序集探测路径(App.config配置)
CLR默认只会在WPF_A的执行目录和系统目录查找依赖程序集,需要在WPF_A的App.config中添加探测规则:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="PROJECT_B\WPF_B;CC" /> </assemblyBinding> </runtime> </configuration>
privatePath中的路径是相对于WPF_A执行目录的子目录,多个路径用分号分隔。
3. 调整项目引用属性
在WPF_A对WPF_B的引用中,右键引用 → 属性:
- 将
复制本地设置为False(避免WPF_B被自动复制到WPF_A根目录,破坏目标结构) - 确认
路径指向WPF_B项目的输出目录(即目标子目录)
4. 备选方案:动态加载程序集
如果上述配置仍无法解决问题,可以手动加载WPF_B程序集并创建实例:
private void button_Click(object sender, RoutedEventArgs e) { // 拼接WPF_B程序集的完整路径 var assemblyPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "PROJECT_B\\WPF_B\\WPF_B.exe"); var assembly = System.Reflection.Assembly.LoadFrom(assemblyPath); // 反射创建MainWindow实例并显示 var windowType = assembly.GetType("WPF_B.MainWindow"); var newform = (System.Windows.Window)Activator.CreateInstance(windowType); newform.Show(); }
内容的提问来源于stack exchange,提问作者Aomichi
相关产品推荐
相关产品推荐

