12

NuGet 経由でも利用できる github でホストされているオープン ソースの C# プロジェクトの場合、ソースをどのように整理すればよいですか? 具体的には:

  • .nu​​spec ファイルは github リポジトリにあるはずですか?
  • .nu​​spec ファイルは .csproj ファイルと同じフォルダーにある必要がありますか?
  • NuGet パッケージ ツリー (/lib、/content など) はどうですか?

私の考えでは、NuGet の部分は github ホスティングとは別のものです。プロジェクト ソースは利用可能ですが、NuGet での公開はそれ自体がオープン ソース操作ではないため、.nuspec は利用できません。すべてのフォークが新しいNuGet パッケージをビルドして公開することを誰も望んでいないため、オープン ソースの Foo パッケージが「Rick's Foo」対「John's Foo」対「Alice's Foo」などとしてギャラリーに表示されます。

しかし、その一方で、github ソース デポをプロジェクトのワンストップ リポジトリとして機能させたいと考えています。他のラップトップを開いてそこから登録すると、再作成せずにビルド/パッケージ化/プッシュできるはずです。 NuGet インフラストラクチャ全体をゼロから作成します (つまり、API キーのみを入力し、それ以上は入力しません)。

これらの 2 つの要件は互いに矛盾しています。

4

2 に答える 2

9

私は次のことをします:

  • .nuspecファイルの次のファイルを.csprojコミットします
  • packages フォルダーを 1 レベル上に移動するnuget.configファイルを追加します。
  • ソリューションでパッケージの復元を有効にし、NuGet パッケージ リポジトリのコンテンツをコミットしないでください
  • 以下を含む msbuild ファイル (または任意のビルド車両) を作成します。
    • ソースをビルドして nuget パッケージを作成する「ビルド」ターゲット
    • NuGet パッケージを nuget.org にプッシュし、API キーをパラメーターとして受け取る "発行" ターゲット。

私は個人的にファイル内の nuget パッケージのバージョン番号を維持.nuspecし、「リリース」を行うときに手動で更新します。このようにして、NuGet フィードにプッシュした正確なリリースにタグを付けることができます。

このセットアップでは、Visual Studio でのビルドは NuGet パッケージを生成しませんが、リポジトリですべてのツールを使用してそれを行うことができます。

フォルダ構造は次のようになります。

   .\Docs\ ==> not in source repo
   .\Packages\ ==> not under source control
   .\Src\ ==> git repo here
   .\Src\MySolution.sln
   .\Src\.gitignore
   .\Src\MuRules.ruleset
   .\Src\build.proj ==> msbuild file to build everything.
   .\Src\MyProject\MyProject.csproj
   .\Src\MyProject\MyProject.nuspec
   .\Src\MyProject\nuget.config
   .\Build\ ==> not under source control
   .\Build\Debug\
   .\Build\Release\
   .\Build\Publish\

パッケージの復元機能のこのバグに注意してください。構成したパッケージの場所が無視されます。http://nuget.codeplex.com/workitem/1990 ==> これは Nuget 2.7 で修正されています

于 2012-11-07T15:37:56.973 に答える
0

nuget v2.8 では、以下を変更.gitignoreして追加するだけです。

packages/

これにより、nugetpackagesフォルダーがコミットから除外されます。チェックアウトした新しいソース コードをビルドすると、パッケージがダウンロードされて復元されます。パッケージの復元設定が有効になっていることを確認しますが、v2.8 ではデフォルトで有効になっていると思います。

于 2015-10-02T14:42:37.170 に答える