这是我遇到的一个非常奇怪的问题。在我的构建过程中,我有自定义脚本,可以在某些文件上运行。其中一个脚本将在创建新文件时重写原始文件的一部分。以下是目标:
<Target Name="GenerateWSHooksTarget" Outputs="%(AllFoundItems.Hooks)" Condition="'$(FoundFiles)'=='true'">
<ReadLinesFromFile File="%(AllFoundItems.FullPath)">
<Output TaskParameter="Lines" ItemName="FileOutputEscaped"/>
</ReadLinesFromFile>
<ItemGroup>
<FileOutputEscaped>
<Escaped>%(FileOutputEscaped.Identity)</Escaped>
<Unescaped>$([MSBuild]::Unescape('%(FileOutputEscaped.Identity)'))</Unescaped>
</FileOutputEscaped>
<FileOutput Include="@(FileOutputEscaped->'%(Unescaped)')" />
</ItemGroup>
<WSHooks ClassName="%(AllFoundItems.Classname)" ImportName="$(MSBuildProjectName)" FileData="@(FileOutput)">
<Output TaskParameter="NewFileData" ItemName="WSHooksOutput"/>
<Output TaskParameter="RewriteFileData" ItemName="WSRewriteOutput"/>
<Output TaskParameter="Changed" ItemName="WSHooksChanged"/>
</WSHooks>
<Message Importance="Normal" Text="Changed: @(WSHooksChanged)"/>
<WriteLinesToFile File="%(AllFoundItems.Hooks)" Lines="@(WSHooksOutput)" Overwrite="True" />
<WriteLinesToFile File="%(AllFoundItems.FullPath)" Lines="@(WSRewriteOutput)" Overwrite="True" Condition="@(WSHooksChanged)=='true'" />
</Target>
它经历了4个基本步骤。
在将行传递给自定义任务之前的某个位置,它们会被修改。它会将声明从Trade Trade = new Trade()
更改为Trade trade = new Trade()
(我意识到大写变量是不好的做法,这只是我构建过程中出现的一个例子。)构建还自动修正了{{1}中的一个类。 } ProductionFoecast
。
我感觉StyleCop或FxCop正在以某种方式运行,但我不认为它正在运行。我也正在导入MSBuildExtensions任务文件,但现在只用它进行搜索。
在我的文件出现之前,有什么想法修改我的文件?
编辑:我想强调的是,这只发生在变量的声明上。因此,当它将ProductionForecast
更改为Trade
时,它只会发生一次,trade
的其余部分保持原样。这自然会破坏构建。
答案 0 :(得分:0)
所以到目前为止,我的解决方案是直接在自定义任务中读取文件。这不是一个非常好的解决方案,因为它无法解释为什么MSBuild变得有感觉并开始纠正拼写,但这是一个解决方法。我将不回答这个问题,希望有人能解释实际发生的事情。