VS2019如何根据构建配置使用对应AssemblyName进行调试
Visual Studio 条件配置程序集名后调试路径错误的解决方案
你遇到的问题根源是Visual Studio的属性UI和调试启动逻辑不会每次都完整执行MSBuild条件求值,仅在项目加载、全量构建时更新属性缓存,未配置全局默认值时会读取上次缓存的旧程序集名作为调试路径。可通过以下方法解决:
方法1:显式配置条件化调试启动命令
在.vcproj文件中,和你现有的AssemblyName条件配置同层级,新增对应配置的StartCommand参数,强制指定不同配置下的调试启动路径:
<StartCommand Condition="'$(Configuration)' == 'Debug'">$(TargetDir)DevelopmentManager.exe</StartCommand> <StartCommand Condition="'$(Configuration)' == 'Release'">$(TargetDir)DevelopmentManager.exe</StartCommand> <StartCommand Condition="'$(Configuration)' == 'Service Release'">$(TargetDir)ServiceManager.exe</StartCommand> <StartCommand Condition="'$(Configuration)' == 'Service Debug'">$(TargetDir)ServiceManager.exe</StartCommand> <StartCommand Condition="'$(Configuration)' == 'SERVICE_LIGHT DEBUG'">$(TargetDir)ServiceLoader.exe</StartCommand> <StartCommand Condition="'$(Configuration)' == 'Service Light Release'">$(TargetDir)ServiceLoader.exe</StartCommand>
方法2:补充兜底默认属性值
在所有条件化AssemblyName配置前,先增加一行无判断条件的默认AssemblyName配置,避免VS读取属性时找不到有效值调用缓存:
<!-- 兜底默认值,优先加载,后续条件匹配时会自动覆盖 --> <AssemblyName>DevelopmentManager</AssemblyName> <!-- 原有条件化配置保持不变 --> <AssemblyName Condition="'$(Configuration)' == 'Service Release'">ServiceManager</AssemblyName> <AssemblyName Condition="'$(Configuration)' == 'Service Debug'">ServiceManager</AssemblyName> <AssemblyName Condition="'$(Configuration)' == 'SERVICE_LIGHT DEBUG'">ServiceLoader</AssemblyName> <AssemblyName Condition="'$(Configuration)' == 'Service Light Release'">ServiceLoader</AssemblyName>
图标配置也可以参照这个逻辑补充默认值。
方法3:用内置变量指定调试启动路径
打开项目属性页的「调试」选项卡,将启动命令修改为$(TargetPath),这个变量是MSBuild每次构建时实时计算的目标程序集全路径,不会读取旧缓存。
调整完成后重新加载项目即可生效,切换配置时无需再手动修改属性。
内容的提问来源于stack exchange,提问作者Marcomattia Mocellin
相关产品推荐
相关产品推荐

