我们正在将构建环境从 NAnt 迁移到 Rake。必须重写一些 NAnt 任务。在这种情况下,XmlPoke 任务(NAntContrib 库的一部分)。使用 Ruby 可以很容易地做到这一点。
问问题
450 次
2 回答
1
我将回答我以为您要问的问题:如何更新程序集版本号。但我从您的回答中看到,您对一般 XML 更新(XML poke 任务的副本)感兴趣。
如何使用 Ruby/Rake/Albacore 更新程序集版本?
我对 .NET 项目的建议是始终更新程序集信息文件中的版本。不是通过直接编辑csproj
. 而 Albacore 包含执行此操作的方法,请使用AssemblyInfo Task。
如何重新创建 NAnt xmlpoke 任务?
实际上,我以 Albacore 的自定义任务的风格编写了几个 .NET 特定的文件更新任务。我打电话给他们apprc
(用于重写 CLI 资源文件,这些文件有愚蠢的编码问题)。而且appconfig
,它确实适用于任何 XML 文件。
信息在自述文件中,但它的工作方式与 xmlpoke 任务略有不同。
appconfig :taskname do |x|
x.files = FileList['relative/wildcard/path/to/*.exe.config']
x.replacements = {
'some/x/path/expression' => 'replacment-value',
'another/x/path/expression' => 'another-replacment!'
}
end
于 2013-03-15T17:38:35.913 回答
0
require 'albacore/tasks/versionizer'
require 'semver'
require 'rexml/document'
include REXML
Albacore::Tasks::Versionizer.new(:versioning)
ver = SemVer.find
ASSEMBLY_VERSION = "#{ SemVer.new(ver.major, ver.minor, ver.patch).format "%M.%m.%p"}" + ".0"
class XmlPoke
attr_accessor :xml_file_path
def initialize xmlfilepath
@xml_file_path = xmlfilepath
end
def pokeelement xpath, value
file = File.open(xml_file_path, 'r')
xmldoc = Document.new(file)
xpathnode = XPath.first(xmldoc, xpath)
xpathnode.text = value
formatter = REXML::Formatters::Default.new
File.open(xml_file_path, 'w') do |result|
formatter.write(xmldoc, result)
end
end
end
desc "Sets Application Version in project file"
task :outlookproj do
projectfilepath = "dotnet_project_path/dotnet_project_name.csproj"
xpath = "/Project/PropertyGroup/ApplicationVersion"
value = "#{ASSEMBLY_VERSION}"
poker = XmlPoke.new projectfilepath
poker.pokeelement xpath, value
end
于 2013-03-08T09:48:43.057 回答