我试图使用SQLite MSBuild任务修复MSBuild项目中的MSBuildCommunityTasks makefile问题。
我需要将确切字符串"$(LTLIBOPTS) $(LTLIBPATHS)“替换为"$(LTLIBOPTS) $(LTLIBPATHS) $(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中进行文件搜索和替换,而不必处理正则表达式?我讨厌正则表达式。
发布于 2018-01-25 20:28:25
我差点就有了。问题不在于替换表达式。问题是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上的.NET Regex测试仪是一个很有价值的资源。它帮助我发现问题根本不在于替换表达式。
当我意识到问题不在替换表达式中时,如何:在MSBuild中转义特殊字符一文帮助我找到了解决问题的方法。
我希望这能帮助其他可能有同样问题的人。
https://stackoverflow.com/questions/48437310
复制相似问题