You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MSBuild.exe在构建时设置C#项目的应用程序属性

问题核心原因

你直接给MSBuild传WhichApp参数不会生效的原因是:项目中通过「属性-设置」创建的Properties.Settings类的默认值是固化在app.config和编译后的资源文件中的,MSBuild的全局属性不会自动同步到Settings的默认值配置中。

你现有动态生成代码方案的问题修复

你参考的自动生成配置类的思路是可行的,执行失败是几个配置错误导致的,按以下步骤修正即可:

  1. 修正MSBuild调用命令
    你错误地将.csproj.user作为构建目标,实际要构建的是主项目文件.csproj,正确的命令格式如下:
"C:\Program Files(x86)\Microsoft Visual Studio\2017\WDExpress\MSBuild\15.0\Bin\MSBuild.exe" SelectApp.csproj /p:PcAppConfig=SUB /p:VersionNum=1.0.0.67 /p:Configuration=Debug /p:Platform="Any CPU"
  1. 修正构建目标逻辑
    建议把BeforeBuild逻辑从.csproj.user移到主项目文件.csproj中(.csproj.user是本地个人配置,提交代码时不会同步,容易在其他环境失效),同时修改转义逻辑避免生成语法错误的代码,修正后的BeforeBuild代码如下:
<Target Name="BeforeBuild">
  <PropertyGroup>
    <!--默认值-->
    <PcAppConfig Condition="'$(PcAppConfig)' == ''">PCB</PcAppConfig>
    <VersionNum Condition="'$(VersionNum)' == ''">1.0.0.66</VersionNum>
    <!--用CDATA避免转义问题,直接写合法C#代码-->
    <TheSourceCode><![CDATA[
internal static class PCAppConfig
{
    public static readonly string value = "$(PcAppConfig)";
}
internal static class VersionNum
{
    public static readonly string value = "$(VersionNum)";
}
    ]]></TheSourceCode>
  </PropertyGroup>
  <!--读取现有源代码,仅在需要变更时重写-->
  <ReadLinesFromFile File="PcAppConfig.cs" ContinueOnError="True">
    <Output TaskParameter="Lines" ItemName="CurrentSourceCode" />
  </ReadLinesFromFile>
  <WriteLinesToFile File="PcAppConfig.cs" Overwrite="True" Lines="$(TheSourceCode)" Condition="'@(CurrentSourceCode)' != '$(TheSourceCode)'" />
  <!--确保生成的文件被加入编译列表-->
  <ItemGroup>
    <Compile Include="PcAppConfig.cs" Condition="!Exists('@(Compile)')" />
  </ItemGroup>
</Target>
  1. 修正业务代码调用逻辑
    不要再使用Properties.Settings.Default读取配置,直接调用生成的静态类即可,修改后的窗体Load代码如下:
if (PCAppConfig.value == "PCB")
{
    // 创建PCB窗体
    PCBForm.ShowDialog();
}
else if (PCAppConfig.value == "SUB")
{
    // 创建SUB窗体
    SUBForm.ShowDialog();
}
  1. 安装项目构建问题修正
    你AfterCompile目标里的devenv路径写死了VS2019的路径,如果你用的是VS2017要对应修改路径,也可以改用VS安装目录的环境变量来适配不同环境,同时建议把vdproj的绝对路径改为相对于项目目录的相对路径。

内容的提问来源于stack exchange,提问作者GRF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:15:04