3

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

手動の解決策は、パッケージ ファイルを調べて手動で解決することです。自動化されたものを書いた人はいますか?

4

2 に答える 2

3

これは古い質問だと思いますが、答えがないので、同じことを探している人に役立つかもしれません。私は現在、従来の/自律的な方法でnuspecファイルの作成をさらに自動化するために、いくつかのRakeタスクに取り組んでいるので、この投稿を後で最終的な解決策で更新します。

ただし、目前の質問に答えるために、ソリューション内の特定のプロジェクトのpackages.configファイルから依存関係を引き出す小さなruby関数を次に示します。

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

このメソッドは「プロジェクト」インスタンスを取り込み、そのプロジェクトのpackage.configファイルから依存関係/バージョンを取得します。

私が言ったように、私はすぐにもっと完全な解決策を投稿します、しかしこれは彼らがそれを必要とするならば誰にとっても良い出発点です。

編集:申し訳ありませんが、これの最終バージョンを投稿するのに非常に時間がかかりましたが、これは私が現在多くのプロジェクトで使用しているサンプルコードを含む要点へのリンクです。

https://gist.github.com/4151627

基本的に、データを「Project」クラスにラップし、package.configから依存関係を設定します。ボーナスとして、プロジェクト間参照からの依存関係も追加します(プロジェクトファイルを解析します)。クラス/ロジックとサンプルのnuspecタスクがあります。

于 2012-07-15T22:03:51.100 に答える
1

確かに、Albacore プロジェクトには、現在それを行うものは何もありません。Mitchell のソリューションが調整され、ロールインされるのを見るのは興味深いことです。コードをGistに移動し、「課題」(拡張)を開いて、サイドで作業します :)

于 2012-09-27T21:32:41.630 に答える