web-dev-qa-db-ja.com

libフォルダ外のNuGetアセンブリ

ここでいくつかの質問を取り上げます...まず、NuGetを使用すると、いくつかのDLLからパッケージを作成できますか?ビジュアルスタジオプロジェクトはありません。コマンドラインといくつかのプリコンパイルされたDLL=ファイル。

第二に、それが可能だと仮定すると、なぜ「libフォルダーの外にアセンブリ」という警告が連続して表示されるのですか?関連するアセンブリを取得して、NuGetパッケージ内の参照として自分自身を追加するために、考えられるすべてを試しました。

私のファイル構造は次のようになります

 Root
   - File1.dll
   - lib
     - File2.dll
     - File3.dll

NuGetにこのような.nuspecを使用してパックするように指示すると

<?xml version="1.0"?>
<package >
  <metadata>
    <id>File1.dll</id>
    <version>1.0.0</version>
    <authors>thisguy</authors>
    <owners>thisguysmom</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>This is some library</description>
    <releaseNotes>Porting to NuGet</releaseNotes>
    <copyright>Copyright 2012</copyright>
    <references>
      <reference file="File2.dll" />      
      <reference file="File3.dll" />
    </references>
  </metadata>
</package>

その警告が表示されます。私が読んでいるものから、libフォルダアイテムが参照として自動的に追加されるため、プロジェクトの参照ノードを定義する必要さえありませんか?

そこにいる誰かがこのNuGetの混乱を理解していますか?

47
farina

参照するDLLはすべてlibフォルダーの下にある必要があります。この警告は、file1.dllがlibの外部にあり、パッケージのインストール中に無視されるためです。 (他の特別なフォルダーは「コンテンツ」と「ツール」です)

私はこの構造を使用していました:

Root
  - lib
    - File1.dll
    - File2.dll
    - File3.dll

詳細については、 http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Package_Conventions を参照してください。

14
Alexandre Dion

私はちょうどこの問題に出くわしました。 Nugetは次のような構造を想定しています。

root
  - lib
    - net40
      - File1.dll
      - File2.dll
      - File3.dll

.netバージョンに応じて、net40またはnet20またはnet45。

走る

nuget pack yourlibrary.nuspec

パッケージ化する。

それは、ホールセールをまとめてnupkgに入れます。エラーメッセージはその時点で消えます。

20
Jason Wall

この投稿の時点で最新のNuGetのバージョン(およびそれ以降のバージョンも同様)では、.nuspecファイルと一緒に.csprojファイルを使用してパッケージを作成できます。私たちがやったのは、.nuspecファイルを作成し(nuget仕様を使用してからカスタマイズする)、プロジェクトに含めることでした。

カスタマイズされた.nuspecファイルでは、次のコマンドを使用しました。

nuget pack sample.csproj -IncludeReferencedProjects

その時点で、.nupkgを構築し、問題を発行しませんでした。 .nu​​pkgファイルは、通常の出力フォルダー(デフォルトでは、bin\debug)に表示されました。

13

Nuspecファイルのタグ内に以下を追加することにより、別のDLLへの参照を追加できます。

<package>
   <metadata>
      ...
</metadata>
<files>
 <file src="..\ReferencedFolder\*.*" target="lib\net40\" />
</files>
</package>
9
Madhu Ranjan

Alexandreは、NuGetパッケージを作成するときに作成される「lib」フォルダーを指します。 Zipファイルと同じように、.nupkgを開くことができます。そこには、lib\netXXフォルダーが表示されます。XXは、ターゲットとする.NETフレームワークのバージョンです。したがって、NuGetファイルをパックするときは、File1.dllがlibフォルダー内にあることを確認してください。

1
Adam S

.NETのbin\debugまたはbin\releaseフォルダーに含まれることにより、「lib」フォルダーに入ります。したがって、プロジェクトをコンパイルして外部DLLのローカルをコピーし、コンパイル時にそれらをbinフォルダーに含める必要があります。

1
user3683706

依存関係またはライブラリが変更されている場合、古いファイルはパッケージング操作に影響します。

  1. プロジェクトからobjおよびbinフォルダーを削除します。
  2. 実行dotnet restore
  3. 実行nuget pack yournuspecfile.nuspec -properties Configuration=Release -IncludeReferencedProjectsまたはコマンドは何でも。
0
Hayrullah Cansu

Von Lemongargle教授のソリューションを使用しましたが、私にとっては素晴らしいソリューションでした。重要:

  1. プロジェクトにスペックファイルを含める(右クリック->プロジェクトに含める)
  2. スペックファイルにプロジェクトの同じファイル名を付けます(myproject.csproj、myproject.nuspec)

これはVisual Studio 2012で完全に機能します。

0
user2408082