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

在PowerShell中为dotnet pack传递多行PackageReleaseNotes参数

问题:PowerShell中dotnet pack传递含特殊字符/多行的PackageReleaseNotes参数失败

常规场景下,通过PowerShell给dotnet pack传递自定义发布说明很简单:

$releaseNotes = "Something"
dotnet pack --configuration Release -p:PackageReleaseNotes=$releaseNotes

但当$releaseNotes变量包含特殊字符、多行内容及代码块时(示例内容如下),参数传递会出现异常:

# Release 2.8.1 - Integrate with Github Actions

- Add Github Actions for build. Remove integration with AppVeyor
- Add architecture tests to check if settings can be properly handled
- Add debuging option for code gen

# Improve TupleHelper
User is no longer required to call for TupleHelper.ParseNext method. It's code was incorporated into ParseElement method. It's now enough to call:
```csharp
var _helper = new TupleHelper(',', '∅', '\\', '(', ')');

var input = "(3.14, Ala ma kota)";
var enumerator = _helper.ParseStart(input, 2, "DoubleAndString");

var key = _helper.ParseElement(ref enumerator, TextTransformer.Default.GetTransformer<double>());
var value = _helper.ParseElement(ref enumerator, TextTransformer.Default.GetTransformer<string>(), 2, "DoubleAndString");

_helper.ParseEnd(ref enumerator, 2, "DoubleAndString");

All generated calls were updated accordingly

尝试过直接调用`dotnet pack --configuration Release -p:PackageReleaseNotes=$releaseNotes`及用`&`启动命令等方式,均无法正常传递变量。

# 解决方案

### 方法1:使用Here-String定义变量+转义双引号
Here-String可以完美保留多行文本和特殊字符的格式,传递时只需转义内容中的双引号即可:
```powershell
# 用Here-String定义发布说明,保留原始格式
$releaseNotes = @"
# Release 2.8.1 - Integrate with Github Actions

- Add Github Actions for build. Remove integration with AppVeyor
- Add architecture tests to check if settings can be properly handled
- Add debuging option for code gen

# Improve TupleHelper
User is no longer required to call for TupleHelper.ParseNext method. It's code was incorporated into ParseElement method. It's now enough to call:
```csharp
var _helper = new TupleHelper(',', '∅', '\\', '(', ')');

var input = "(3.14, Ala ma kota)";
var enumerator = _helper.ParseStart(input, 2, "DoubleAndString");

var key = _helper.ParseElement(ref enumerator, TextTransformer.Default.GetTransformer<double>());
var value = _helper.ParseElement(ref enumerator, TextTransformer.Default.GetTransformer<string>(), 2, "DoubleAndString");

_helper.ParseEnd(ref enumerator, 2, "DoubleAndString");

All generated calls were updated accordingly
"@

调用dotnet pack时,转义内容中的双引号并包裹参数

dotnet pack --configuration Release "-p:PackageReleaseNotes=$($releaseNotes -replace '"', '""')"

### 方法2:通过临时文件传递内容
将发布说明写入临时文件,再读取文件内容传递给参数,避免直接传递复杂文本的转义问题:
```powershell
# 将发布说明写入utf8编码的临时文件(无BOM)
$releaseNotes | Out-File -Path "./temp-release-notes.txt" -Encoding utf8NoBOM

# 读取文件内容并传递给dotnet pack
dotnet pack --configuration Release "-p:PackageReleaseNotes=$(Get-Content "./temp-release-notes.txt" -Raw)"

# 可选:删除临时文件
Remove-Item "./temp-release-notes.txt"

关键说明

  • PowerShell向外部命令传递含特殊字符的参数时,需要用双引号包裹参数值,内部的双引号要转义为两个双引号("")。
  • 使用-Raw参数读取文件时,会保留文本的换行符和原始格式,避免内容被拆分。

内容的提问来源于stack exchange,提问作者Michał Bryłka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:40:23