2011-09-20 14 views
38

のは、私はこのような構成のプロジェクトを持っているとしましょう:複数のDLLとnugetパッケージを作成します

MyLibrary\ 
    MyLibrary.sln 
    MyLibrary.Core\ 
    MyLibrary.Core.csproj 
    MyLibrary.Extensions\ 
    MyLibrary.Extensions.csproj 
    MyLibrary.Tests\ 
    MyLibrary.Tests.csproj 

私はMyLibrary.Core.dllとMyLibrary.Extensions.dllをパッケージ化し、単一のNuGetパッケージを作成したいです。私はこれを行うためにNuGetを得る方法を理解していないようです。私は手動で仕様ファイルを構築しようとしましたが、 "nuget spec MyLibrary.Core.csproj"を使ってビルドしようとしました。私はすべてのDLLをlib /フォルダに追加しようとしましたが、これはパッケージにDLLを追加するための規約ベースのメカニズムと理解しています。どのような場合でも、パッケージに入るためにMyLibary.Core.dllを取得できますが、MyLibrary.Extensions.dllはそれに沿ってパッケージ化されません。

TLDR:複数のプロジェクト/アセンブリでNuGetパッケージを作成するためのベストプラクティスは何ですか?これに焦点を当てたチュートリアルはありますか?私が見つけたチュートリアルはすべて、シンプルな単一プロジェクトのデモに焦点を当てています。

答えて

2

NuGet Package Explorerを試しましたか?それは、あなたがそのファイルを使用し、それはlibが名前の下のフォルダにDLLを置く場合

nuget spec 

http://nuget.codeplex.com/releases/view/59864

+0

+1 - このツールを使用すると、最終的に完全な実行可能なパッケージを作ることができたので、私はそれもお勧めします。 – Dib

18

はあなたが持つ空白nuspecファイルを生成しました:最も簡単な方法かもしれませんそれらをパッケージ化します。

プロジェクトやDLLからnuspecファイルを生成しようとすると少し問題がありました。 また、nuspecファイル内のファイルを手動で参照する場合、表記規則は使用されません。これはおそらく、dllやプロジェクトから生成されたnuspecの問題です。

build\nuget.exe pack nuget\Company.Project.nuspec -BasePath nuget\ 
+0

ありがとうございます。私はBasePathスイッチを使用して、私が何をしているのかを知ることができると思います。 – RationalGeek

+0

これは私のために働いた。 – mhvelplund

35

:あなたは別のフォルダに実行されるビルドスクリプトからこれを実行しようとしている場合も

、あなたは-BasePathコマンドラインを介して、あなたの\ libフォルダの場所をnuget伝えることができます1つのプロジェクト(またはnuspecファイル)でNuGetを実行しますが、file element経由で他のプロジェクトへのポインタをサポートしています。この要素は、プロジェクトの参照番号の名前を使用するので、a)他のプロジェクトファイルの場所を見つける必要がなく、b)ビルド後のステップとして特定の場所にファイルをコピーする必要がありません。

<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
    <metadata> 
    ... 
    </metadata> 
    <files> 
    <file src="bin\Release\MyLibrary.Extensions.dll" target="lib\net40" /> 
    <file src="bin\Release\MyLibrary.Tests.dll" target="lib\net40" /> 
    </files> 
</package> 
:あなたは MyLibrary.Core.csprojためnuspecファイルを持っている、そしてそれは MyLibrary.Extensions彼らは、ビルド後のbinディレクトリに終わるようMyLibrary.Testsを参照すると仮定すると

この設定では、すべての参照がNuGetパッケージの適切な場所に配置されます。ハードコードされた「リリース」はまだありますが、とにかくそのデバッグビルドのNuGetパッケージを配布していないと思っています。

+11

"Release"をハードコードする必要はありませんが、 "$ configuration $"で置き換えることができます。その理由は、nupkgを構築するときにMSBuildのパラメータを使用できるためです。もちろん、パッケージを作るのにMSBuildを使用しない限り.. – niaher

1

私は最近、このソリューションを公開しました...

私のソリューションでは、各パッケージに複数のアセンブリ、外部ビルド時に作成されたNuGetとNuGetの両方への参照、さらにはデバッグ用のソースコードを含むソリューションを構築するときに、NuGetパッケージを自動作成することができます。

あなたの場合は、新しいクラスライブラリプロジェクトをソリューションに追加し、パッケージ化するプロジェクトを参照してからポストビルドイベントを追加するだけです。

walk-through guide heresource code + binary hereの記事があります。

+0

ガイドへのリンクは... –

+0

@Stefanはリンクを修正しました。 –

1

私はいくつかのチュートリアルを持っている私は窓およびVisual Studioでそれをやった方法:

はローカルフォルダを作成し、それはのようなパッケージングを呼び出します。c:/パッケージ// libが - libにそれを呼び出すフォルダ内の別のフォルダを作成することが重要と過去のdll。

オープンnugetパッケージエクスプローラ - https://npe.codeplex.com/downloads/get/clickOnce/NuGetPackageExplorer.application

UIは非常に直感的なだけでDLLを追加し、/ libににエクスポート(それはロシア語でチュートリアルhttps://blog.zwezdin.com/2014/building-nuget-packages-with-gui-tool/のためではなく、絵、それは約3回のクリックだ流れを参照してください)

それあなたが開発者に提供しなければなりません=> CDパッケージ

(のパス)*多分窓にします。cd cを:https://git-for-windows.github.io/とに移動 - nuspecファイル

オープンGITのBASHを作成します。 GITのBASHで窓のLinuxのもの(https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/

のオプションは、次のコマンドを入力します。nuget -sourceを追加[オプション]

:パス:nuspecのフルネームが

とを(.nuspec含めます)フォルダ(C:/パッケージ// LIB)のフォルダのlibの

アクションが別のコマンドを入力しますGITのBASHで正常に

終了後:

ナゲットパック.nuspec

このフォルダにない.nupkgファイルがあります。

How to install a Nuget Package .nupkg file locally? - チュートリアルビジュアルスタジオに追加する方法。

0

私は同じ問題を抱えていました。選択したプロジェクトから他のナゲットを作成することを可能にするNugetを作成することにしました。

パッケージはNuget.org siteにデプロイされています。プロジェクトで参照した後nuspeckファイルをプロジェクトを生成するプロジェクトに追加する必要があります。あなたが行う必要があり

Project with the required nuspeck file

最終のものは、パッケージマネージャでコマンドを作成-Nuspecを呼び出すです。 PowerShellモジュールはビルドの結果であるすべてのライブラリを受け取り、必要な依存関係も追加し、出力ディレクトリにナゲットを作成します。

関連する問題