我无法让我的正则表达式在MSBuild中工作(我实际需要它)。
var input = @"Es wird versucht, das Paket aus ""Amusoft.EventManagement.csproj"" zu erstellen.;Paketerstellung der Dateien aus ""D:\SVN\Amusoft\Amusoft.EventManagement\Amusoft.EventManagement\bin\Release"".;""Amusoft.EventManagement.nuspec"" wird für Metadaten verwendet.;Das Paket ""D:\SVN\Amusoft\Amusoft.EventManagement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.nupkg"" wurde erfolgreich erstellt.;Es wird versucht, das Symbolpaket für ""Amusoft.EventManagement.csproj"" zu erstellen.;Paketerstellung der Dateien aus ""D:\SVN\Amusoft\Amusoft.EventManagement\Amusoft.EventManagement\bin\Release"".;""Amusoft.EventManagement.nuspec"" wird für Metadaten verwendet.;Das Paket ""D:\SVN\Amusoft\Amusoft.EventManagement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.symbols.nupkg"" wurde erfolgreich erstellt.";
var m = Regex.Match(input, "(?<=\")[^\"]+nupkg(?=\")");
返回D:\SVN\Amusoft\Amusoft.EventManagement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.nupkg
这正是我想要的。但是我无法在MSBuild中返回任何内容,这就是我需要的地方。
<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'">
<!-- Ensure Directory + Package project-->
<MakeDir Directories="$(SolutionDir)build\$(ProjectName)\$(Configuration)\"/>
<Exec ConsoleToMSBuild="true" Command="nuget pack $(ProjectPath) -Symbols -Prop Configuration=Release -OutputDirectory $(SolutionDir)build\$(ProjectName)\$(Configuration)" >
<Output TaskParameter="ConsoleOutput" ItemName="NugetPackOutput"/>
</Exec>
<!-- Prepare pushing process -->
<Message Importance="High" Condition="!Exists('$(ProjectDir)nugetapikey.txt')" Text="nugetapikey.txt does not exist." />
<ReadLinesFromFile Condition="Exists('$(ProjectDir)nugetapikey.txt')" File="$(ProjectDir)nugetapikey.txt">
<Output TaskParameter="Lines" ItemName="NugetApiKey"/>
</ReadLinesFromFile>
<Message Importance="High" Condition="Exists('$(ProjectDir)nugetapikey.txt')" Text="NugetApiKey is '@(NugetApiKey)'" />
<PropertyGroup>
<NugetPackageFileName2>$([System.Text.RegularExpressions.Regex]::Match(@(NugetPackOutput), `(?<=")[^"]+nupkg(?=")`))</NugetPackageFileName2>
<NugetPackageFileName>$([System.Text.RegularExpressions.Regex]::Match(@(NugetPackOutput), `(?<=")[^"]+.nupkg(?=")`))</NugetPackageFileName>
<NugetPushCommand>nuget push PICKNAMEINEXPLORER $(NugetPackageFileName) -ApiKey @(NugetApiKey) -Timeout 60 -Verbosity normal</NugetPushCommand>
</PropertyGroup>
<Message Importance="High" Text="Pushcommand is $(NugetPushCommand)" />
<Message Importance="High" Text="Pack Output is @(NugetPackOutput)" />
<Message Importance="High" Text="NugetPackageFileName is $(NugetPackageFileName)" />
<Message Importance="High" Text="NugetPackageFileName2 is $(NugetPackageFileName2)" />
<Message Importance="High" Text="Regex1 is $([System.Text.RegularExpressions.Regex]::Match(@(NugetPackOutput), '.+'))" />
<Message Importance="High" Text="Regex2 is $([System.Text.RegularExpressions.Regex]::Match(@(NugetPackOutput), `.+`))" />
<Message Importance="High" Text="Regex3 is $([System.Text.RegularExpressions.Regex]::Match(@(NugetPackOutput), '(?<=")[^"]+nupkg(?=")'))" />
<WriteLinesToFile Condition="Exists('$(ProjectDir)nugetapikey.txt')" File="$(SolutionDir)build\$(ProjectName)\$(Configuration)\pushcommand.txt" Lines="$(NugetPushCommand)" Overwrite="true" Encoding="Unicode"/>
<Exec ConsoleToMSBuild="true" ContinueOnError="true" IgnoreExitCode="true" Command="explorer.exe $(SolutionDir)build\$(ProjectName)\$(Configuration)" />
</Target>
NugetPackageFileName is
1> NugetPackageFileName2 is
1> Regex1 is Es wird versucht, das Paket aus "Amusoft.EventManagement.csproj" zu erstellen.;Paketerstellung der Dateien aus "D:\SVN\Amusoft\Amusoft.EventManagement\Amusoft.EventManagement\bin\Release".;"Amusoft.EventManagement.nuspec" wird für Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Amusoft.EventManagement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.nupkg" wurde erfolgreich erstellt.;Es wird versucht, das Symbolpaket für "Amusoft.EventManagement.csproj" zu erstellen.;Paketerstellung der Dateien aus "D:\SVN\Amusoft\Amusoft.EventManagement\Amusoft.EventManagement\bin\Release".;"Amusoft.EventManagement.nuspec" wird für Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Amusoft.EventManagement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.symbols.nupkg" wurde erfolgreich erstellt.
1> Regex2 is Es wird versucht, das Paket aus "Amusoft.EventManagement.csproj" zu erstellen.;Paketerstellung der Dateien aus "D:\SVN\Amusoft\Amusoft.EventManagement\Amusoft.EventManagement\bin\Release".;"Amusoft.EventManagement.nuspec" wird für Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Amusoft.EventManagement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.nupkg" wurde erfolgreich erstellt.;Es wird versucht, das Symbolpaket für "Amusoft.EventManagement.csproj" zu erstellen.;Paketerstellung der Dateien aus "D:\SVN\Amusoft\Amusoft.EventManagement\Amusoft.EventManagement\bin\Release".;"Amusoft.EventManagement.nuspec" wird für Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Amusoft.EventManagement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.symbols.nupkg" wurde erfolgreich erstellt.
1> Regex3 is
1> Regex3 is
.+
和&#39;。+&#39;试图验证内联Regex是否正常工作 - 情况就是这样。但是,任何通过正则表达式获取值的实际尝试都会失败。
基本上我在这里尝试做的是拥有一个构建脚本(当我完成时)将打开一个控制台窗口,其中包含一个预先填充的命令,可以将软件包推送到nuget,而不会在源代码管理中删除我的apikey /的csproj。除了获得我的正则表达式值之外,其余版本已在以前的版本中使用过。
有没有人知道我在Regex的MSBuild版本中做错了什么?
答案 0 :(得分:1)
这里的问题不在于正则表达式。 Match
需要一个String
,它适用于Properties
,但不适用于Items
。
您需要更改Exec
的输出类型(参见下文),然后参考$(NugetPackOutput)
而不是@(NugetPackOutput)
。
<强>之前强>
<Output TaskParameter="ConsoleOutput" ItemName="NugetPackOutput"/>
<强>后强>
<Output TaskParameter="ConsoleOutput" PropertyName="NugetPackOutput"/>
这是一个证明这一点的测试。请注意,在MatchItem2
的情况下,正则表达式实际上与ItemName
而不是输出匹配。
<强> test.bat的强>
@ECHO off
ECHO Es wird versucht, das Paket aus "Amusoft.EventManagement.csproj" zu erstellen.;Paketerstellung der Dateien aus "D:\SVN\Amusoft\Amusoft.EventManagement\Amusoft.EventManagement\bin\Release".;"Amusoft.EventManagement.nuspec" wird für Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Amusoft.EventManagement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.nupkg" wurde erfolgreich erstellt.;Es wird versucht, das Symbolpaket für "Amusoft.EventManagement.csproj" zu erstellen.;Paketerstellung der Dateien aus "D:\SVN\Amusoft\Amusoft.EventManagement\Amusoft.EventManagement\bin\Release".;"Amusoft.EventManagement.nuspec" wird für Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Amusoft.EventManagement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.symbols.nupkg" wurde erfolgreich erstellt.
<强> BuildApp.csproj 强>
<Target Name="Test">
<Exec ConsoleToMSBuild="true" Command="test.bat">
<Output TaskParameter="ConsoleOutput" ItemName="OutputItem" />
<Output TaskParameter="ConsoleOutput" PropertyName="OutputProperty" />
</Exec>
<Message Text="OutputItem: @(OutputItem)" />
<Message Text="---" />
<Message Text="OutputProperty: $(OutputProperty)" />
<Message Text="---" />
<Message Text="MatchItem1: $([System.Text.RegularExpressions.Regex]::Match(@(OutputItem), '.+'))" />
<Message Text="---" />
<Message Text="MatchItem2: $([System.Text.RegularExpressions.Regex]::Match(@(OutputItem), '.{5}'))" />
<Message Text="---" />
<Message Text="MatchItem3: $([System.Text.RegularExpressions.Regex]::Match(@(OutputItem), '(?<=")[^"]+nupkg(?=")'))" />
<Message Text="---" />
<Message Text="MatchProperty: $([System.Text.RegularExpressions.Regex]::Match($(OutputProperty), '(?<=")[^"]+nupkg(?=")'))" />
</Target>
测试输出
Test:
test.bat
Es wird versucht, das Paket aus "Amusoft.EventManagement.csproj" zu erstellen
.;Paketerstellung der Dateien aus "D:\SVN\Amusoft\Amusoft.EventManagement\Amu
soft.EventManagement\bin\Release".;"Amusoft.EventManagement.nuspec" wird f?r
Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Amusoft.EventManagement\build\
Amusoft.EventManagement\Release\WeakEvent.2.0.0.nupkg" wurde erfolgreich erst
ellt.;Es wird versucht, das Symbolpaket f?r "Amusoft.EventManagement.csproj"
zu erstellen.;Paketerstellung der Dateien aus "D:\SVN\Amusoft\Amusoft.EventMa
nagement\Amusoft.EventManagement\bin\Release".;"Amusoft.EventManagement.nuspe
c" wird f?r Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Amusoft.EventManag
ement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.symbols.nupkg" wu
rde erfolgreich erstellt.
OutputItem: Es wird versucht, das Paket aus "Amusoft.EventManagement.csproj"
zu erstellen.;Paketerstellung der Dateien aus "D:\SVN\Amusoft\Amusoft.EventMa
nagement\Amusoft.EventManagement\bin\Release".;"Amusoft.EventManagement.nuspe
c" wird f?r Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Amusoft.EventManag
ement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.nupkg" wurde erfo
lgreich erstellt.;Es wird versucht, das Symbolpaket f?r "Amusoft.EventManagem
ent.csproj" zu erstellen.;Paketerstellung der Dateien aus "D:\SVN\Amusoft\Amu
soft.EventManagement\Amusoft.EventManagement\bin\Release".;"Amusoft.EventMana
gement.nuspec" wird f?r Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Amusof
t.EventManagement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.symbo
ls.nupkg" wurde erfolgreich erstellt.
---
OutputProperty: Es wird versucht, das Paket aus "Amusoft.EventManagement.cspr
oj" zu erstellen.;Paketerstellung der Dateien aus "D:\SVN\Amusoft\Amusoft.Eve
ntManagement\Amusoft.EventManagement\bin\Release".;"Amusoft.EventManagement.n
uspec" wird f?r Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Amusoft.EventM
anagement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.nupkg" wurde
erfolgreich erstellt.;Es wird versucht, das Symbolpaket f?r "Amusoft.EventMan
agement.csproj" zu erstellen.;Paketerstellung der Dateien aus "D:\SVN\Amusoft
\Amusoft.EventManagement\Amusoft.EventManagement\bin\Release".;"Amusoft.Event
Management.nuspec" wird f?r Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Am
usoft.EventManagement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.s
ymbols.nupkg" wurde erfolgreich erstellt.
---
MatchItem1: Es wird versucht, das Paket aus "Amusoft.EventManagement.csproj"
zu erstellen.;Paketerstellung der Dateien aus "D:\SVN\Amusoft\Amusoft.EventMa
nagement\Amusoft.EventManagement\bin\Release".;"Amusoft.EventManagement.nuspe
c" wird f?r Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Amusoft.EventManag
ement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.nupkg" wurde erfo
lgreich erstellt.;Es wird versucht, das Symbolpaket f?r "Amusoft.EventManagem
ent.csproj" zu erstellen.;Paketerstellung der Dateien aus "D:\SVN\Amusoft\Amu
soft.EventManagement\Amusoft.EventManagement\bin\Release".;"Amusoft.EventMana
gement.nuspec" wird f?r Metadaten verwendet.;Das Paket "D:\SVN\Amusoft\Amusof
t.EventManagement\build\Amusoft.EventManagement\Release\WeakEvent.2.0.0.symbo
ls.nupkg" wurde erfolgreich erstellt.
---
MatchItem2: @(Out
---
MatchItem3:
---
MatchProperty: D:\SVN\Amusoft\Amusoft.EventManagement\build\Amusoft.EventMana
gement\Release\WeakEvent.2.0.0.nupkg