我正在尝试使用MSBuildCommunityTasks FileUpdate任务修复MSBuild项目中SQLite makefile的问题。
我需要替换确切的字符串" $(LTLIBOPTS)$(LTLIBPATHS)"使用确切的字符串" $(LTLIBOPTS)$(LTLIBPATHS)$(TCLLIBPATHS)。"
我找到了一个匹配我正在搜索的字符串的正则表达式。它如下。
\$\x28LTLIBOPTS\x29 \$\x28LTLIBPATHS\x29
问题在于我无法弄清楚要用于ReplacementText的魔法咒语,以使其用所需的文本替换它。我能得到的最接近的如下。
$$\(LTLIBOPTS\) $$\(LTLIBPATHS\) $$\(TCLLIBPATHS\)
我正在使用FileUpdate任务,如下所示。
<FileUpdate
Files="$(MSBuildProjectDirectory)\$(SQLITE_DIR)\Makefile.msc"
Regex="\$\x28LTLIBOPTS\x29 \$\x28LTLIBPATHS\x29"
ReplacementText="$$\(LTLIBOPTS\) $$\(LTLIBPATHS\) $$\(TCLLIBPATHS\)" />
这会导致以下内容插入文件中。
$\(LTLIBOPTS\) $\(LTLIBPATHS\) $\(TCLLIBPATHS\)
有人可以告诉我,我需要为ReplacementText使用什么神奇的咒语?
感谢。
另外,有没有办法在MsBuild中进行文件搜索和替换而不必乱用正则表达式?我讨厌正则表达式。
答案 0 :(得分:0)
我几乎拥有它。问题不在于替换表达式。问题是MsBuild将$(STRING)解释为变量引用。我需要在ReplacementText中使用%24而不是$,如下所示。
<FileUpdate
Condition="!Exists('$(MSBuildProjectDirectory)\$(SQLITE_DIR)\sqlite_patched')"
Files="$(MSBuildProjectDirectory)\$(SQLITE_DIR)\Makefile.msc"
Regex="\$\x28LTLIBOPTS\x29 \$\x28LTLIBPATHS\x29"
ReplacementText="%24(LTLIBOPTS) %24(LTLIBPATHS) %24(TCLLIBPATHS)" />
顺便说一句,我发现Regex Storm的.NET Regex Tester是一个宝贵的资源。它帮助我弄清楚问题不在于替换表达式。
一旦我意识到问题不在替换表达式中,文章How to: Escape Special Characters in MSBuild帮助我找出解决问题的方法。
我希望这有助于其他可能遇到同样问题的人。