C# 在C中加载封送的Ruby对象#
运行命令C# 在C中加载封送的Ruby对象#,c#,ruby,rubygems,C#,Ruby,Rubygems,运行命令gem-V时,该命令的输出显示类似以下内容: GET http://rubygems.org/latest_specs.4.8.gz 302 Found GET http://production.s3.rubygems.org/latest_specs.4.8.gz 200 OK 这将向您发送一个gzip文件,其中包含另一个名为latest_specs.4.8的文件,您可以使用以下简单的Ruby应用程序Marshal.load: require 'pp' require 'rubyg
gem-V
时,该命令的输出显示类似以下内容:
GET http://rubygems.org/latest_specs.4.8.gz
302 Found
GET http://production.s3.rubygems.org/latest_specs.4.8.gz
200 OK
这将向您发送一个gzip文件,其中包含另一个名为latest_specs.4.8
的文件,您可以使用以下简单的Ruby应用程序Marshal.load
:
require 'pp'
require 'rubygems/version'
# This assumes you've downloaded the file to the current directory
pp Marshal.load(File.open('latest_specs.4.8'))
运行此命令,它将漂亮地打印一个多维数组
,如下所示:
[
["rails", Gem::Version.new("2.3.5"), "ruby"],
["sinatra", Gem::Version.new("0.9.4"), "ruby"],
["watir", Gem::Version.new("1.6.5"), "ruby"]
]
非常简单,但我正在尝试制作一个C#RubyGems GUI应用程序,当您有过时的gems时,它会提醒您
现在,由于最新的_specs文件是由Ruby封送的,我是否可以在C#中访问它,而不运行系统命令gem
?查看,似乎获取列表不会太困难
只需修改#execute
# File lib/rubygems/commands/outdated_command.rb, line 18
def execute
locals = Gem::SourceIndex.from_installed_gems
locals.outdated.sort.each do |name|
local = locals.find_name(name).last
dep = Gem::Dependency.new local.name, ">= #{local.version}"
remotes = Gem::SpecFetcher.fetcher.fetch dep
remote = remotes.last.first
say "#{local.name} (#{local.version} < #{remote.version})"
end
end
看一看,要想获得这份名单似乎并不难
只需修改#execute
# File lib/rubygems/commands/outdated_command.rb, line 18
def execute
locals = Gem::SourceIndex.from_installed_gems
locals.outdated.sort.each do |name|
local = locals.find_name(name).last
dep = Gem::Dependency.new local.name, ">= #{local.version}"
remotes = Gem::SpecFetcher.fetcher.fetch dep
remote = remotes.last.first
say "#{local.name} (#{local.version} < #{remote.version})"
end
end
是的,我已经用Ruby搞乱了。但我正试图用C#来重现它。我可以下载并解压缩最新的C#规范文件,但我无法在C#中解压它。你试过使用iron ruby吗?您可以使用DLR接口从.NET调用它是的,我已经在Ruby中处理过了。但我正试图用C#来重现它。我可以下载并解压缩最新的C#规范文件,但我无法在C#中解压它。你试过使用iron ruby吗?您可以使用DLR接口从.NET调用它