ReplacementText 中的 MSBuildCommunityTasks FileUpdate $、( 和 )
MSBuildCommunityTasks FileUpdate $, (, and ) in ReplacementText
我正在尝试使用 MSBuildCommunityTasks FileUpdate 任务解决 MSBuild 项目中 SQLite 生成文件的问题。
我需要用准确的字符串“$(LTLIBOPTS) $(LTLIBPATHS) $(TCLLIBPATHS)”替换准确的字符串“$(LTLIBOPTS) $(LTLIBPATHS)”。
我找到了一个与我正在搜索的字符串相匹配的正则表达式。具体如下。
$\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 中进行文件搜索和替换,而不必乱用正则表达式?我讨厌正则表达式。
我差一点就搞定了。问题不在于替换表达式。问题是 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 帮助我弄清楚如何解决我的问题。
我希望这对可能遇到同样问题的其他人有所帮助。
我正在尝试使用 MSBuildCommunityTasks FileUpdate 任务解决 MSBuild 项目中 SQLite 生成文件的问题。
我需要用准确的字符串“$(LTLIBOPTS) $(LTLIBPATHS) $(TCLLIBPATHS)”替换准确的字符串“$(LTLIBOPTS) $(LTLIBPATHS)”。
我找到了一个与我正在搜索的字符串相匹配的正则表达式。具体如下。
$\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 中进行文件搜索和替换,而不必乱用正则表达式?我讨厌正则表达式。
我差一点就搞定了。问题不在于替换表达式。问题是 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 帮助我弄清楚如何解决我的问题。
我希望这对可能遇到同样问题的其他人有所帮助。