web-dev-qa-db-ja.com

TeamCityにNuGetパッケージを含める

最近、NuGetを使用して外部パッケージを管理し始めました。今のところ、NLogにのみ必要です。 VS 2012でプロジェクトをビルドすると、すべてが正常に機能します。しかし、TeamCityをCIサーバーとして試してみましたが(CIはかなり新しいので)、次のエラーが発生します。

[Csc] SomeNamespace\SomeClass.cs(10, 7): error CS0246: 
The type or namespace name 'NLog' could not be found 
(are you missing a using directive or an Assembly reference?)

(このエラーは、NLogを使用するすべての場所で繰り返されます)

今では、SVNに 'packages /'フォルダーを含めませんでした。バイナリを含めずに、TeamCityのMSBuildにこれらを独自にダウンロードさせることをお勧めしたからです。しかし、それは明らかにそうではありません。 'packages.xml'ファイルをSVNに含めます。何が問題なのかを確認するために何を確認できますか?

更新 @DavidBrabantのおかげで、正しい方向に動かされました。ただし、TeamCityで次のエラーが発生します。

Package restore is disabled by default. To give consent, open the Visual Studio Options dialog, 
click on Package Manager node and check 'Allow NuGet to download missing packages during build.'

しかし、私はVisual StudioではなくTeamCityにいるので、「同意」をtrueに設定する方法がわかりません! NuGet.targetsファイルでRestorePackagesを「true」に設定しようとしました:

<RestorePackages Condition="  '$(RestorePackages)' == '' ">true</RestorePackages>

しかし、これはうまくいきませんでした。

pdate 2これを機能させるために、次のプロパティNuGet.targetsも設定します。

<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'true' ">false</RequireRestoreConsent>

これにより、ビルドが正常に実行されました。

35
HTBR

NuGetに組み込まれているパッケージの復元機能を有効にすると、ワークフローのビルド前の部分を非常に簡単にセットアップできます。これを行うには、Visual Studioのソリューションエクスプローラーでソリューションノードを右クリックし、[NuGetパッケージの復元を有効にする]オプションをクリックします。 NuGet Visual Studio Extensionがシステムにインストールされている必要があることに注意してください。実行してもこのメニュー項目が表示されない場合は、すでにこのオプションが有効になっているか、ソリューションディレクトリに.nugetという名前のフォルダーが存在します。

このオプションを設定した後、repositories.configファイルを除いて、デフォルトで$(SolutionDir)\ p​​ackagesのパッケージインストールディレクトリのすべてのサブフォルダーを削除できます。ソリューションは引き続き正しくコンパイルされます。コンパイル中、Visual Studioの出力ウィンドウにNuGetインストールトレースが表示され、必要なNuGetパッケージがパッケージインストールディレクトリにも再表示されるはずです。

パッケージをコミットせずにNugetを使用する も参照してください。

22
David Brabant

アップデート2について繰り返し説明します。ここで偶然、TeamCityがNuGetパッケージをダウンロードしないようにするためのクイックフィックスを探していた場合は、この行を変更してみてください。

<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>

この行へ

<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'true' ">false</RequireRestoreConsent>

あなたのNuGet.targetsファイルとそれは動作するはずです。

12
craastad

TeamCity v8では、TCの環境変数を使用して「パッケージの復元」エラーを解決できました。

見る:

http://johanleino.wordpress.com/2013/03/19/using-teamcity-for-asp-net-development-part-2/

そして

http://confluence.jetbrains.com/display/TCD7/Configuring+Build+Parameters#ConfiguringBuildParameters-SystemPropertiesandEnvironmentVariables

設定env.EnableNuGetPackageRestoreプロジェクトレベルの環境変数として「true」に設定すると、すべてのビルド構成の問題が修正されます。 NuGet.targetsファイルimhoを編集するよりも、これを行うほうが少し良いと感じます。

8
Nate Rickard

この投稿を見てください: http://johanleino.wordpress.com/2013/06/17/making-use-of-teamcitys-nuget-capabilities-part-2/

そこで説明したように、最初のビルドステップ "NuGet Installer"を追加し、いくつかの構成を行うと、パッケージが自動的に復元されます。

4
Bounz