Albacore nuspec任务可以自动解决所有依赖关系吗?

时间:2012-03-08 14:18:46

标签: c# rake albacore nuspec

Albacore nuspec任务可以解决解决方案所需的所有依赖关系吗?当我有几个项目需要更改依赖项时,需要花费很多精力才能使rakefile保持最新状态。这可以自动化吗?

desc 'create the nuget package'
nuspec do |nuspec|
   nuspec.id = 'myprojectid'
   nuspec.version = '1.2.3'
   nuspec.authors = 'Jon Jones'
   nuspec.description = 'my-project is a collection of utilties'
   nuspec.title = 'my-project'
   nuspec.dependency <magic here>
end

手动解决方案是通过包文件并手动解决。有人写过任何自动化的东西吗?

2 个答案:

答案 0 :(得分:3)

我意识到这是一个老问题,但看到它没有答案,这可能有助于某人寻找同样的事情。我目前正在开发一些Rake Tasks来进一步自动化以传统/自治方式创建nuspec文件,因此我将在稍后用最终解决方案更新这篇文章。

要回答手头的问题,这里有一个小的ruby函数,可以从解决方案中给定项目的packages.config文件中提取依赖项。

def GetProjectDependencies(project)
    path = "#{File::dirname project.FilePath}/packages.config"
    packageDep = Array.new

    if File.exists? path
        packageConfigXml = File.read("#{File::dirname project.FilePath}/packages.config")
        doc = REXML::Document.new(packageConfigXml)
        doc.elements.each("packages/package") do |package|
            dep = Dependency.new
            dep.Name = package.attributes["id"]
            dep.Version = package.attributes["version"]
            packageDep << dep
        end
    end

    packageDep
end

使用了Dependency类:

class Dependency
    attr_accessor :Name, :Version

    def new(name, version)
        @Name = name
        @Version = version
    end
end

此方法接受“project”实例,并从该项目的package.config文件中获取依赖项/版本。

正如我所说,我会尽快发布一个更完整的解决方案,但如果他们需要,这对任何人来说都是一个很好的起点。

编辑:很抱歉,我花了这么长时间才发布最终版本,但这里有一个指向gist的链接,其中包含我目前用于多个项目的示例代码。

https://gist.github.com/4151627

基本上,我将数据包装在“Project”类中,并从package.config中填充依赖项。作为奖励,它还添加了项目间引用的依赖项(解析项目文件)。这里有类/逻辑,以及示例nuspec任务。

答案 1 :(得分:1)

可以肯定的是,Albacore项目中没有任何内容可以立即执行此操作。有趣的是看到Mitchell的解决方案已经调整好并且可能会卷入其中。我将把代码移到a gist,打开一个“issue”(增强版),并在旁边进行处理:)