2015-01-13 17 views
6

これは、NuGetパッケージに含まれるファイルを取得しようとしている人々がよく読んでいるのとは反対の問題です。私はを停止しようとしていますファイルが自動的に含まれています。NuGet Pack:デフォルトは無視されます。

私は、コンパイル済みのMVCビューテンプレート(RazorGenerator.Mvcを使用)、.lessファイル、JavaScriptを必要に応じてサポートするライブラリを作成しています。アイデアは、これらがすべてのサイトに入る基本的なものであるということです。任意の新しく作成されたビュー、.lessファイル、またはスクリプトは次のようになり、プロジェクトのコンテンツを、:デフォルトでは

nuget packは、いずれかのファイルがビルドアクションマークされています。 この動作を無効にするオプションはないようです。ここで関連する質問はempty <files> node in the .nuspec to stop all includesの解決策を示しましたが、私はのファイルを含めたいと思います。

さて、一時しのぎとして、私は明示的に(代わりになしを使用していない)コンテンツ、私は、私はそれらを配置したい場所をコピーしたくないファイルを明示的設定ではないすべてのものを設定し、通過することができます.nuspecファイルを使用してコピーしました。しかし、将来の自分のような別の開発者が来てこのステップを忘れた場合は、新しく追加されたファイルがパッケージにコピーされ、次にインストールまたはアップデート時にコピー先のプロジェクトにコピーされます。

私はOctoPackを発見した、とすぐそれが.nuspec<files>ノードを検出すると、デフォルトでは何も含めないことでしょうが、私はチームシティーから何かを使用して、そしてどのように理解することが私のビルドサーバースクリプトを書き換えていませんよナゲットパックの代わりにOctoPackを呼び出すことは、私を素晴らしい選択肢として打つことはありません。 OctoPackにも制限があります。依存関係を手動でリストアップする必要があります.nuspecファイルの置き換えトークンは、(AssemblyInfo.csから読み取られる代わりに)コマンドラインで渡されなければならず、ツールはこの目的のために意図されていないようです「OctoPackは、展開する予定のプロジェクトにのみインストールする必要があります。つまり、コンソールアプリケーションプロジェクト、Windowsサービスプロジェクト、ASP.NET Webアプリケーションを意味します。ユニットテスト、クラスライブラリ、およびその他のサポートプロジェクトは選択されません" (OctoPack Documentation

私が試した次の代替は、単にBeforeBuildイベント中にコンテンツグループを一掃するmsbuildを使用していた。

<Target Name="BeforeBuild"> 
    <ItemGroup> 
     <Content Remove="**\*.*" /> 
     <None Include="**\*.*" /> 
    </ItemGroup> 
    <Message Text="Content files: @(Content)" Importance="High" /> 
</Target> 

メッセージは、コンテンツグループが空であることを確認、しかしnuget packいないようですケアする。それはとにかくすべてのファイルを含んでいます。

すべての人に手動でマークすることなく、誰でもこのようなパッケージを作成できました。Build Action:なし OctoPackを使用しないでください。

答えて

5

あなたはまだ(OctoPack付き等)トークン置換と自動を失うが、あなたが(.csproj.nuspecの両方を探しますだけではなくnuget pack、)nuget pack MyProject.nuspecを呼び出した場合、あなたは目的の動作を得ることができるようです依存関係。だから完璧な解決策ではありません。--no-default-contentのようなものですが、十分にうまくいっています。

nuget pack MyProject.nuspec -Properties version={XYZ}(ここで、XYZはビルドサーバーによって埋め込まれます)は、少なくともバージョン番号が正しくインクリメントされるようにします。たとえば、.nuspec

<version>1.1.0.$version$</version>に設定し、最後の部分としてSVNリビジョンを使用することができます。

+0

"これは完璧な解決策ではありません。これは' --no-default-content'のようなものです。もっと完全な解決策は、.nuspecファイルに何かを書き込んでこれを制御することです。誰が毎回「ナゲット」に渡すパラメータを覚えているのか? – binki

+0

継続的な統合サーバーを使用している人は誰も覚えておく必要はありません。ここで、新しい依存関係を追加したり、依存関係のバージョンを変更したりすると、そのデータをpackages.configから読み取るのではなく、手動でnuspecに追加する必要があることを覚えておく必要があります。 –

0

もう1つの解決方法(まだ理想的ではありませんが、少なくとも.csprojファイルを渡し続け、その利点を失うことはありません)は、結果の.nupkgファイルの内容フォルダを削除することです(.zipとして扱います)。このスクリプトで使用される - - System.IO.Compression

Remove files from .zip file with Powershell

注ことのみのPowerShell 3.0および.NET 4.5で動作します:

これを行う簡単な方法は、このようなスクリプトを経由しています。

関連する問題