2011-12-15 12 views
6

NuGetの復元で最近問題が発生しました。私はプロジェクトの依存関係(この場合はPostSharp)を追加して復元を有効にしました。私はソースを調べましたが、/ packagesディレクトリはチェックしていませんでした。チームシティーや他の開発者がソースをつかみ、MSBuildのを実行すると、彼らは次のエラーが表示されます依存関係によって.csprojに.targetsインポートが追加されると失敗する

C:\TeamCity\buildAgent\work\e374975c0264c72e\ProjectName\ProjectName.csproj(70, 3): error MSB4019: The imported project "C:\TeamCity\buildAgent\work\e374975c0264c72e\packages\PostSharp.2.1.5.1\tools\PostSharp.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk. 

問題があり、NuGetはPostSharpをダウンロード/復元するために、まだ実行されていないか、それは.targetsファイルです。これはNuGetのバグのような感じですが、他の人が同じ問題を抱えているかどうかを知りたがっています。

誰もがこの問題を抱えているか、解像度を知っています。はい、/ packagesディレクトリにチェックインできましたが、なぜNuGetを使うのですか?

答えて

1

@ porterhouse91、csprojファイルをチェックして、適切なビルドターゲットが設定されていることを確認しましたか?
私はまだ新しい組み込みのパッケージ復元機能を試していませんが、私はそれがインターウェブ上にある以前のワークフローのように少なくともいくらかは動作すると仮定しています。その場合、ソリューションでパッケージ復元を有効にするのは、ソリューション内のプロジェクトにのみ有効です。パッケージの復元を有効にしてから、ソリューションに新しいプロジェクト(NuGetの依存関係を持つ)を追加した場合は、再度有効にする必要があります。 別の可能性:以前のワークフローでは、VCSにチェックインするために必要な.nugetフォルダを持っていたため、まだチェックインされていない場合はチェックインする必要があります(組み込みパッケージ復元機能がこのアプローチを使用してください)。

この回答がすべて役に立ちましたら、スティーブン・リッチーに感謝します。彼は私にあなたにそれを撃つように頼んだ。

1

このような問題もありましたが、ソースパッケージの.targetsファイルを修正して回避することができました。基本的にRestorePackagesは、プロジェクトのビルド時に実行されるビルドターゲットです。残念なことに、パッケージは、インポートが満たされる前に正しくロードされません。私がこれを修正するために知っている唯一の方法は、コンテンツとして.targetsファイルを含め、BuildDependsOnプロパティを変更してカスタムタスクを実行する前にパッケージを復元することです。

<PropertyGroup> 
    <BuildDependsOn Condition="$(BuildDependsOn.Contains('RestorePackages'))"> 
    RestorePackages; 
    CustomTarget; 
    $(BuildDependsOn); 
    </BuildDependsOn> 
    <BuildDependsOn Condition="!$(BuildDependsOn.Contains('RestorePackages'))"> 
    CustomTarget; 
    $(BuildDependsOn); 
    </BuildDependsOn> 
</PropertyGroup> 

これは、あらかじめ構築されたパッケージには役立ちませんが、パッケージを自分で再構築することができれば修正できます。

0

Visual Studio 2012でこの同じ問題が発生し、ソース管理にチェックされていないNuGetパッケージが発生しました。

エラー:

The imported project "\packages\Microsoft.Bcl.Build.1.0.7\tools\Microsoft.Bcl.Build.targets" was not found. 
Confirm that the path in the <Import> declaration is correct, and that the file exists on disk. 

私はNuGetパッケージなしでソース管理からプロジェクトをつかむために、次の回避策を与えた状況にMSDN writeupを見つけました。私はオプションで行くことにした

  • .targetsファイル
  • チェックイン復元し、チェックイン

  • 明示的に実行するパッケージが復元すべて​​のパッケージファイルをプロジェクトをビルドする前に、パッケージを使用して

    1. ストップ#2では、現在NuGet(v2.6)には、visual studio内のpackages.configファイルからすべてのパッケージをインストールする方法は含まれていません。一部の検索では、Visual Studio(reference)を開く前にNuGet Command Lineを使用して次のコマンドを実行する必要があることが明らかになりました。

      c:\path\to\nuget.exe install -o packages project-folder\packages.config 
      
  • 3

    別のアプローチは、例えば、それを条件付きにするために、問題の<Import>要素を変更することです。:

    <Import Project="$(CodeAssassinTargets)" Condition="Exists($(CodeAssassinTargets))" /> 
    

    これは<PropertyGroup>以前に定義された新しいプロパティに依存します。私は通常例えば、他の「グローバル」フラグでcsprojファイルの先頭に1を追加します。これらにより

    <Target Name="BeforeBuild"> 
        <Error Text="CodeAssassin.ConfigTransforms target is missing. It needs to exist at $(CodeAssassinTargets) in order to build this project!" Condition="!Exists($(CodeAssassinTargets))" /> 
    </Target> 
    

    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
        <PropertyGroup> 
         <CodeAssassinTargets>$(SolutionDir)packages\CodeAssassin.ConfigTransform.1.1\tools\CodeAssassin.ConfigTransform.targets</CodeAssassinTargets> 
         <AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings> 
         <UseMsdeployExe>true</UseMsdeployExe> 
        </PropertyGroup> 
    

    は、その後、適切なターゲットに、BeforeBuildのように、有用なエラーメッセージを与えますナゲットパッケージのリストアが一度も行われていなくても、プロジェクトはロードされます。自動パッケージ復元が有効になっている場合、最初のビルド試行で欠落しているターゲットの問題を解決する必要があります。

    関連する問題