35

最近、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 にこれらを独自にダウンロードさせるのが良い方法だと考えたからです。しかし、それは明らかにそうしていません。私はSVNに「packages.xml」ファイルを含めます。何が問題なのかを確認するには、何を確認できますか?

更新 @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>

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

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

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

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

4

4 に答える 4

22

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

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

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

于 2013-01-21T12:37:18.053 に答える
12

更新 2 について繰り返します。TeamCity が NuGet パッケージをダウンロードしない問題の簡単な修正を探してここでつまずいた場合は、この行を変更してみてください。

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

この行に

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

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

于 2013-08-14T09:25:47.317 に答える
8

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 を編集するよりも、これを行う方が少し気分が良くなります。

于 2013-09-10T00:40:12.903 に答える
4

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

そこに記載されているように、最初のビルドステップ「NuGet インストーラー」を追加し、いくつかの構成を行い、パッケージが自動的に復元されるようになりました。

于 2013-10-05T07:38:46.593 に答える