如何从WPF应用配置控制台程序随Windows启动及同解决方案多项目发布
解决方案
一、WPF与后台控制台项目的关联配置
不需要对控制台项目做项目引用,两个程序作为独立运行的进程处理,按以下步骤配置即可:
- 右键解决方案→【属性】→【项目依赖项】,设置WPF项目依赖于控制台项目,保证每次生成/发布时优先编译控制台项目
- 右键WPF项目→【属性】→【生成事件】,在预生成事件命令行中添加以下命令,自动将控制台项目的输出文件复制到WPF的输出目录,注意替换占位符为你自己的项目名与框架版本:
dotnet build $(SolutionDir)后台控制台项目名\后台控制台项目名.csproj -c $(Configuration) xcopy /y $(SolutionDir)后台控制台项目名\bin\$(Configuration)\net6.0-windows\*.exe $(TargetDir) xcopy /y $(SolutionDir)后台控制台项目名\bin\$(Configuration)\net6.0-windows\*.dll $(TargetDir)
- WPF中直接通过根目录相对路径获取后台程序的绝对路径,用于写入注册表:
// 后台程序与WPF主程序在同一个目录,直接拼接路径即可 string backgroundProcessPath = Path.Combine(AppContext.BaseDirectory, "后台控制台程序名.exe");
- 若不需要控制台黑框显示,右键控制台项目→【属性】→【应用程序】→【输出类型】,修改为Windows 应用程序即可实现纯后台静默运行。
二、双项目合并发布配置
无需额外复杂配置,按以下步骤操作即可保证发布后文件完整:
- 打开WPF项目的发布配置页,在【要部署的内容】选项中勾选包含项目引用中的所有文件、包含来自NuGet包的所有文件
- 如果使用独立发布模式,勾选生成单个文件时注意要把后台程序排除在单个文件打包逻辑外:右键WPF项目编辑csproj文件,添加以下配置:
<ItemGroup> <Content Include="后台控制台程序名.exe"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <ExcludeFromSingleFile>true</ExcludeFromSingleFile> </Content> <Content Include="后台控制台程序名.dll"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <ExcludeFromSingleFile>true</ExcludeFromSingleFile> </Content> </ItemGroup>
- SQLite数据库路径注意两边保持统一,两个项目都用
Path.Combine(AppContext.BaseDirectory, "你的数据库名.db")读取,保证读写的是同一个数据库文件。 - 开机启动注册表建议写入
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run路径,无需管理员权限即可生效,适配普通用户安装场景。
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

