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

如何在MSBuild或DotNet CLI中用项目/程序集名设置C# ErrorLog文件名

如何让C#编译器ErrorLog文件名包含项目/程序集名

问题原因

直接在命令行传递/property:ErrorLog=$(AssemblyName).sarif时,$(AssemblyName)会被当前shell(比如CMD/PowerShell)优先解析为字面字符串,而非传递给MSBuild读取项目属性,最终生成的日志文件名为$(AssemblyName).sarif而非预期的项目/程序集名。

解决方案

1. 命令行转义属性引用

针对不同shell,转义$符号让MSBuild能正确解析项目属性:

  • Windows CMD
    msbuild mysolution.sln /property:ErrorLog=^$(AssemblyName).sarif
    
  • PowerShell
    msbuild mysolution.sln /property:ErrorLog=`$(AssemblyName).sarif
    # 或用单引号包裹属性值
    msbuild mysolution.sln /property:'ErrorLog=$(AssemblyName).sarif'
    
  • Bash/Linux Shell
    msbuild mysolution.sln /property:ErrorLog=\$(AssemblyName).sarif
    # 或用单引号包裹属性值
    msbuild mysolution.sln /property:'ErrorLog=$(AssemblyName).sarif'
    

2. 直接修改项目文件(推荐长期使用)

打开项目的.csproj文件,在<PropertyGroup>节点中添加ErrorLog配置,MSBuild会自动解析项目属性:

<PropertyGroup>
  <!-- 可替换为$(ProjectName)生成项目名命名的日志 -->
  <ErrorLog>$(AssemblyName).sarif</ErrorLog>
</PropertyGroup>

之后执行常规构建命令即可:

msbuild mysolution.sln

3. 使用MSBuild响应文件

创建一个响应文件(如build-config.rsp),写入以下内容:

/property:ErrorLog=$(AssemblyName).sarif

执行构建时指定响应文件:

msbuild mysolution.sln @build-config.rsp

响应文件中的属性引用会被MSBuild直接解析,无需转义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:11:02