web-dev-qa-db-ja.com

Nugetパッケージの生成libフォルダーを除外します

.nu​​specファイルを使用してnugetパッケージを生成しようとしています。 1つの屋根の下にいくつかのプロジェクトがあり、nLog.config(および変換ファイル)を作成して、nugetパッケージを介して配布しようとしています。 .Net Frameworkのどのバージョンでも、同じ構成ファイルのセットを探しています(構成のみ、dllはありません)。したがって、\ lib\net45\myproject.dllや\ lib\net40\myproject.dllは本当に必要ありません。ただし、nugetパッケージを生成すると、常にlibフォルダーが作成され、dllが含まれます。 .netFrameworkのバージョンに関連するプロジェクトの依存関係を作成する種類。

以下は、私が何か間違ったことをしている場合に誰かが参照したい場合に備えて、私のnuspecファイルです。私は ""と他のいくつかのことを試しましたが、運がありませんでした。

<?xml version="1.0"?>
<package >
  <metadata>
    <id>NLogConfig</id>
    <version>1.0.3</version>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <copyright>Copyright 2013</copyright>
    <dependencies>
      <dependency id="NLog" version="2.1.0" />
      <dependency id="NLog.Schema" version="2.1.0" />
    </dependencies>
  </metadata>
  <files>    
    <file src="NLog.config" target="content" />
    <file src="NLog.Debug.config" target="content" />
    <file src="NLog.UAT.config" target="content" />
    <file src="NLog.Release.config" target="content" />
    <file src="tools\*.*" target="tools"/>          
  </files>
</package>

Nuspecファイル(推奨)または他のメカニズムを使用してlibフォルダーを完全に除外するにはどうすればよいですか?ありがとう!

enter image description here

更新1:

私はこっそりしようとしましたが、成功しませんでした。ビルド後のイベントを入れて、DLLを削除しようとしました。しかし、どういうわけかシステムはスマートで、「エラー79「C:\ GITRepo\NLogConfig\NLogConfig\bin\Release\NLogConfig.dll」が見つかりません。プロジェクトがビルドされていることを確認してください。」というエラーが表示されました。

アップデート2

.csprojを使用してnugetパッケージをビルドする方法は見つかりませんでしたが、外部コマンドを使用してnuspecファイルを指定すると、同じ結果を得ることができました。質問はまだ残っていますこれは私の回避策のみです。

24
TorontoKid

私は自分の経験を共有したいと思いました。必要なのは、csprojをNuget.exeターゲットとして使用し(NuGetに依存関係を自動的に解決させたいため)、結果パッケージにlibフォルダーを使用しないことでした。そのフォルダーを省略するには、次のコマンドを使用しました。

nuget pack <projectPath> -Exclude bin/**/*.*
13
AndreyCh

NuGetPackコマンドオプション-Toolを使用します。 https://docs.Microsoft.com/en-us/nuget/tools/cli-ref-pack を参照してください。

「プロジェクトの出力ファイルをツールフォルダに置くかどうかを決定します。」

7
Tomáš Veselý

最初にプロジェクトの出力フォルダーからすべてのファイルを除外することで、この問題を解決しました

<file src="bin\**\*.*" target="lib\net451" exclude="bin\**\*.*" />

そして、実際にNuGet.exeを介してパッケージ化するときに、.nuspecとnot csprojをターゲットにしました。結果のパッケージには、/ libフォルダーの下にプロジェクトの出力dllが含まれていませんでした。

5
Dav Evans

Nugetがプロジェクトを読み取り、それに応じてパッケージを生成することが重要であるため、これはプロジェクトごとにパックするときに予想される動作です。また、見つかった.nuspecはコンテンツを追加することしかできず、以前に追加したものを削除することはできません。

したがって、2番目の更新は、実行することになっていることです。代わりに、.nuspecでパックしてください。

1
Alex

また、これに問題があり、パッケージ作成をプロジェクトから切り離すという回避策の問題は、nuspecファイルでワイルドカードを使用できないことです。私の回避策は、パッケージをプロジェクトに追加した後に実行されるinstall.ps1PowerShellスクリプトを使用することです。ただし、PowerShellスクリプトを実行できるように、最初にパッケージマネージャーコンソールでExecutionPolicyを設定する必要があります。

param($installPath, $toolsPath, $package, $project)
$project.Object.References | Where-Object { $_.Name -eq 'NLogConfig' } | ForEach-Object { $_.Remove() }

デフォルトであるExecutionPolicyが制限されているマシンでは実行に失敗するため、この回避策は本当に好きではありません。

0
Donn R

依存関係要素を削除する必要がありますプロジェクトを使用してパッケージをビルドするまで、nugetはそれらのdllへの参照を追加します

<?xml version="1.0"?>
<package >
  <metadata>
    <id>NLogConfig</id>
    <version>1.0.3</version>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <copyright>Copyright 2013</copyright>
  </metadata>
  <files>    
    <file src="NLog.config" target="content" />
    <file src="NLog.Debug.config" target="content" />
    <file src="NLog.UAT.config" target="content" />
    <file src="NLog.Release.config" target="content" />
    <file src="tools\*.*" target="tools"/>          
  </files>
</package>
0
giammin

Exclude構文を使用すると、libファイルをパッケージに含めたままにすることができます。以下のようなもの:

<files>
<file src="bin\Debug\*.*" exclude="bin\Debug\*.dll" />
</files>

詳細については、 http://docs.nuget.org/docs/reference/nuspec-reference を参照してください。

0
Dan Liu

だから私は同じ問題を抱えていました、.dllが含まれているかどうかは本当に気にしませんでしたが、コンテンツに.csを付けて発行していました。その場合、クラスはターゲットプロジェクトに追加されたコンテンツと以前のdllの両方に存在しますパッケージがインストールされたときに追加されました(同じ行に沿って何かをしていると推測します)。

ビルドアクションをコンテンツフォルダーにあった.csファイルに変更してNONEに変更し、DLLに含まれないようにしました。

注:これを行うと、.csファイル内のコードは検証されないため、すべてが正しいことがわかっている場合は、最後のステップとしてこれを実行する必要があります。

DLLを完全に除外するのは良いことですが、これはプロジェクトをビルドとして使用する私の回避策でした。

これが誰かを助けることを願っています

0
workabyte