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

如何阻止csproj文件中URL值在dotnet build时被自动解码?

解决MSBuild Exec任务自动解码URL的问题

要阻止MSBuild在传递命令行参数时自动解码URL,确保遗留工具WebApiTool能获取到原始编码的URL值,可以采用以下几种方法:

方法一:对URL进行双重编码

由于MSBuild会自动解码一次URL,因此对目标编码URL再进行一次URL编码,这样MSBuild解码后就会得到你需要的原始编码值。

修改后的csproj配置:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

  <Target Name="Generate code">
        <Exec Command="dotnet tool run WebApiTool QueryUrl=https%253A%252F%252Fmy-web-api.azurewebsites.net%252Fapi%252Fv2%252Fexport%253Ftype%253Djson%2526excludes%253DexcludeThis%252CexcludeThat" />
  </Target>
</Project>

这里将原编码URL中的%替换为%25(即对%进行URL编码),实现双重编码效果。

方法二:使用MSBuild属性转义特殊字符

通过定义MSBuild属性存储原始编码URL,再在Exec命令中对%进行转义,避免MSBuild自动解码。

修改后的csproj配置:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <!-- 存储原始编码的URL -->
    <EncodedQueryUrl>https%3A%2F%2Fmy-web-api.azurewebsites.net%2Fapi%2Fv2%2Fexport%3Ftype%3Djson%26excludes%3DexcludeThis%2CexcludeThat</EncodedQueryUrl>
  </PropertyGroup>

  <Target Name="Generate code">
        <!-- 将属性中的%替换为%25,实现转义 -->
        <Exec Command="dotnet tool run WebApiTool QueryUrl=$(EncodedQueryUrl.Replace('%', '%25'))" />
  </Target>
</Project>

这种方式更易于维护,原始编码URL清晰可见,通过Replace方法自动完成转义。

方法三:使用XML实体转义

在XML中,也可以通过将%转义为&#37;,让MSBuild在解析XML时保留%的原始状态,避免解码。

修改后的csproj配置:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

  <Target Name="Generate code">
        <Exec Command="dotnet tool run WebApiTool QueryUrl=https&#37;3A&#37;2F&#37;2Fmy-web-api.azurewebsites.net&#37;2Fapi&#37;2Fv2&#37;2Fexport&#37;3Ftype&#37;3Djson&#37;26excludes&#37;3DexcludeThis&#37;2CexcludeThat" />
  </Target>
</Project>

这种方法直接在XML层面转义特殊字符,确保%不会被MSBuild解析为URL编码的一部分。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:52:26