作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
MSBuild通常用正斜杠替换生成文件中的反斜杠(通常在路径中),这在处理跨平台项目时会有所帮助。但是我有一个不希望MSBuild碰到反斜杠的任务:我们的构建中有一个自定义任务,它需要一个正则表达式和一个替换任务,并更新文件。 (我正在使用它来更新AssemblyInfo.cs文件中的版本号,从git describe
获取版本号。有一个TeamCity构建功能可以运行,只要我能控制它何时运行,但这是另一回事了-足够了也就是说,在我的MSBuild文件中执行此操作似乎是目前最好的方法)。
我的问题是,MSBuild通过在传递给自定义任务的属性中用正斜杠替换反斜杠来“帮助”我,从而对正则表达式造成了严重破坏。我写的是:
<FileUpdate File="$(RootDir)/GlobalAssemblyInfo.cs" Regex='AssemblyFileVersion\("[^"]+"\)' ReplacementText='AssemblyFileVersion("$(VersionNumber)")' />
error : Did not manage to replace 'AssemblyFileVersion/("[^"]+"/)' with 'AssemblyFileVersion/("1.1.0.92"/)'
<FileUpdate File="$(RootDir)/GlobalAssemblyInfo.cs" Regex='AssemblyFileVersion[(]"[^"]+"[)]' ReplacementText='AssemblyFileVersion("$(VersionNumber)")' />
\s
的正则表达式或其他反斜杠表达式,然后我将被沉没。在此之前,我真的很想弄清楚如何告诉MSBuild“停止帮助我!我说了反斜杠,而我真的是在这个ONE属性中指的是反斜杠,而不是正斜杠。您可以通过所有其他属性来“帮助”我你喜欢,但不要管这个!”有任何想法吗?
最佳答案
您可以创建自己的“替换文本任务”,并只需将/更改为\即可控制错误替换的字符,或者使用其他更独特的标记。
<UsingTask TaskName="ReplaceFileText" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">
<ParameterGroup>
<InputFilename ParameterType="System.String" Required="true" />
<MatchExpression ParameterType="System.String" Required="true" />
<ReplacementText ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Reference Include="System.Core" />
<Using Namespace="System" />
<Using Namespace="System.IO" />
<Using Namespace="System.Text.RegularExpressions" />
<Code Type="Fragment" Language="cs">
<![CDATA[
File.WriteAllText(
InputFilename,
Regex.Replace(File.ReadAllText(InputFilename), MatchExpression.Replace('/', '\\'), ReplacementText)
);
]]>
</Code>
</Task>
关于msbuild - 如何阻止MSBuild将反斜杠替换为正斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32711973/
我是一名优秀的程序员,十分优秀!