替换为从文件读取或从代码生成的值?
Replacing with values read from file or generated from code?
在 SlowCheetah 中,我想转换我的配置文件的某些元素,而不是使用转换文件中的硬编码值,而是使用另一个文件的内容或(最好)从代码生成的值。例如,在从代码生成值的情况下,而不是这样:
{
"someSettings": {
"@jdt.replace": {
"timeTokenAtBuild": "1f3ac2"
}
}
}
...我想要这样的东西:
{
"someSettings": {
"@jdt.replace": {
"timeTokenAtBuild": [MyUtilitiesLibrary.GetCurrentTimeToken()]
}
}
}
从诸如 PowerShell 脚本之类的东西中获取值也可以。我目前可以使用 SlowCheetah 执行此操作吗?如果不是,扩展它以允许此功能有多难?
或者,我可以使用其他一些 NuGet 包或 msbuild 机制来实现此行为吗?
Replacing with values read from file or generated from code?
不知道 SlowCheetah。但是对于 MSBuild,您可以定义一个自定义替换任务来执行此操作:
<UsingTask TaskName="ReplaceFileText" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<InputFilename ParameterType="System.String" Required="true" />
<OutputFilename 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(
OutputFilename,
Regex.Replace(File.ReadAllText(InputFilename), MatchExpression, ReplacementText)
);
]]>
</Code>
</Task>
</UsingTask>
然后您可以使用此任务来替换配置文件的元素:
<Target Name="BeforeBuild">
<ReplaceFileText
InputFilename="$(YouConfigFilePath)YourConfigFile.config"
OutputFilename="$(YouConfigFilePath)YourConfigFile.config"
MatchExpression="1f3ac2"
ReplacementText="$(Value)" />
</Target>
注意,由于替换值是从代码生成的,您可能需要使用 PowerShell 脚本或其他脚本来设置 msbuild 的值 属性:
How to set value for msbuild property using powershell?
希望这对您有所帮助。
在 SlowCheetah 中,我想转换我的配置文件的某些元素,而不是使用转换文件中的硬编码值,而是使用另一个文件的内容或(最好)从代码生成的值。例如,在从代码生成值的情况下,而不是这样:
{
"someSettings": {
"@jdt.replace": {
"timeTokenAtBuild": "1f3ac2"
}
}
}
...我想要这样的东西:
{
"someSettings": {
"@jdt.replace": {
"timeTokenAtBuild": [MyUtilitiesLibrary.GetCurrentTimeToken()]
}
}
}
从诸如 PowerShell 脚本之类的东西中获取值也可以。我目前可以使用 SlowCheetah 执行此操作吗?如果不是,扩展它以允许此功能有多难?
或者,我可以使用其他一些 NuGet 包或 msbuild 机制来实现此行为吗?
Replacing with values read from file or generated from code?
不知道 SlowCheetah。但是对于 MSBuild,您可以定义一个自定义替换任务来执行此操作:
<UsingTask TaskName="ReplaceFileText" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<InputFilename ParameterType="System.String" Required="true" />
<OutputFilename 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(
OutputFilename,
Regex.Replace(File.ReadAllText(InputFilename), MatchExpression, ReplacementText)
);
]]>
</Code>
</Task>
</UsingTask>
然后您可以使用此任务来替换配置文件的元素:
<Target Name="BeforeBuild">
<ReplaceFileText
InputFilename="$(YouConfigFilePath)YourConfigFile.config"
OutputFilename="$(YouConfigFilePath)YourConfigFile.config"
MatchExpression="1f3ac2"
ReplacementText="$(Value)" />
</Target>
注意,由于替换值是从代码生成的,您可能需要使用 PowerShell 脚本或其他脚本来设置 msbuild 的值 属性:
How to set value for msbuild property using powershell?
希望这对您有所帮助。