このプロジェクトは、このコンピューターにないNuGetパッケージを参照しています


313

昨日動作したASP.NET MVC5アプリケーションがあり、ビルドしようとするとこのエラーが発生します。

このプロジェクトは、このコンピューターに存在しないNuGetパッケージを参照しています。

nugetが不足しているパッケージを自動的にダウンロードしてインストールできるようにする2つのオプションがオンになっているか、オンになっています。また、packagesフォルダー内のすべてのファイルを削除してから、nugetでそれらを再ダウンロードしてみました。また、nugetを開いて更新を探すと、インストールする必要のあるものは何もないと表示されます。この驚くほど厄介な問題を乗り越えるために他に何をすべきかわからない。


1
また、プロジェクトを右クリックしてそのオプションを選択することにより、nuget復元を有効にしました。次に、nugetフォルダーとそのフォルダーに3つのアイテムを追加し、問題を解決するために何もしません。私は再構築を試みましたが、それでも上記と同じエラーが発生します。
オースティンハリス

ソリューションに.nugetフォルダーが含まれていて、NuGetを最新バージョンに更新しましたか?こちらをご覧ください:stackoverflow.com/questions/18833649/…–
David Brabant

はい、試してみましたが、ビルドエラーメッセージの問題は解決しませんでした。
オースティンハリス14

このエラーのもう1つの理由はThe operation has timed out.エラーです。ビルド中。ビルドログ、またはVisual Studioオンラインビルド失敗情報画面の[ 診断 ]タブを確認する必要があります。
Joshua Drake、

解決策はどれも私にとってはうまくいきません。リポジトリからダウンロードしていますが、パッケージは最初のプロジェクトの正しいファイル構造で復元されますが、2番目のプロジェクトはそれらを見つけることができません。.csprojを確認すると、正しい相対パスが使用されていることが示されているので、これを解決しようとして途方に暮れています。github.com/DanJ210/ProgrammersTest
Daniel Jackson

回答:


463

私の場合、.csprojファイルから以下を削除する必要がありました。

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  <PropertyGroup>
    <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
  </PropertyGroup>
  <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

実際、このスニペットでは、エラーメッセージの送信元を確認できます。

MSBuild統合パッケージの復元から自動パッケージ復元に変換していました(http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore


12
これでうまくいきましたが、<Target> </ Target>要素を削除するだけで済みました。<Import>要素も削除した場合、VS [2013]はそれを復元するように見えました。
Robert Taylor

3
これは本当に信じられないことです。なぜマイクロソフトはすべてをそれほど難しくするのですか?
dimiguel、2015

11
これを削除できるとしたら、そもそもなぜそこにあるのですか?
OK999 2016

1
OK9999、ある時点で、以前のバージョンのVisual Studioからソリューションを右クリックし、以前の方法で実行した[NuGetパッケージの復元を有効にする]を選択して有効にしておく必要があります。それはもう必要ありません
Loren Paulsen

3
物を削除するだけのソリューションが大好きです。
トッド・ムニエ

86

1つの解決策は、以下を.csprojファイルから削除することです。

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  <PropertyGroup>
    <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
  </PropertyGroup>
  <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

どうやって?

  1. プロジェクトを右クリックします。プロジェクトをアンロードします。
  2. プロジェクトを右クリックします。csprojを編集します。
  3. ファイルからパーツを削除します。セーブ。
  4. プロジェクトを右クリックします。プロジェクトをリロードします。

プロジェクトをある場所から別の場所に移動する場合、これはうまく機能します。
Dean Seo

4
@IvanSantiago 同じ解決策ですでに回答済みでした!..投票DOWN!..
ジャック

2
私の答えは説明し@ClintEastwood どのようにそれを行うには。それが違いです。ユーザーがHOW TOを探している場合、上記の回答とは対照的に、私の回答にはそれがあります。
Ivan Santiago

2
@IvanSantiago可能性があります:コメントとして追加するか、またはハウツーで元の回答を編集します。
コリン

50

私の場合、ソリューションフォルダーをある場所から別の場所に移動し、それを少し再編成し、その過程で相対フォルダー構造が変更された後に発生しました。

だから私は私の.csprojファイル内の次のようなエントリをすべて編集する必要がありました

  <Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />

  <Import Project="packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />

(から..\packages\への変更に注意packages\してください。場合によっては、相対構造が異なる可能性がありますが、アイデアはわかります。)


3
同様の問題.... .csprojファイルをディレクトリ構造の1つ上のレベルに移動し、「.. \ .. \ packages \ ...」から「.. \ packages \ ...」に変更する必要がありました。
tmgirvin

2
私にも同様の問題がありましたが、本当に奇妙です。サブソリューションモジュールで使用していたため、そのソリューションでは問題ありませんでしたが、別のソリューションからそのソリューションを参照すると、パッケージが別の場所にありました。.csproj全体で.. \ packagesを$(SolutionDir)packagesに変更し、それを修正しました。
JoeNCA

2
.csprojファイルを手動でいじりたくない場合は、プロジェクトにインストールしたすべてのnugetパッケージをメモし、それらを削除して再インストールすると、この問題が解決することがわかりました。この問題が発生したときに、ソリューションからプロジェクトを削除して独自のgitリポジトリに配置しようとしていました。
WiteCastle 2015

これは、.csprojが.slnファイルと同じレベルにあることを意味しますか?
Simon_Weaver 2017年

@Simon_Weaverあなた.csprojに対するあなたの相対的な位置は.slnこの文脈では関係ありません。重要なのは、あなたの中で参照されている.csproj何かが別の場所に移動したかどうかです。その場合は、修正する必要があります。「.csproj」を参照するすべてのものをそのままに.sln移動したが、それをそのままにした場合、.slnファイルを新しい場所の.csproj-es に修正する必要がありますが、.csprojファイルを編集する必要はありません。
Nikita G.17年

22

私の解決策を右クリックしてから、[ NuGetパッケージの復元を有効にする]オプションをクリックすることで、この問題を簡単に解決します

(PS:Visual Studio 2013のNuget Install From Tools-> Extensions and Update-> Nuget Package Managerがあることを確認してください。この拡張を最初にインストールしない場合)

それが役に立てば幸い。


7
これはnugetパッケージを復元する古い方法であり、回避する必要があります。
マフィンマン

2
@TheMuffinMan:新しい方法とは何か、なぜこの方法を回避する必要があるのか​​を明確にしていただけますか(VS 2013のエラー出力がそれを正確に行うように指示していると考えて)?
CantrianBear 2016

2
@CantrianBearこのページdocs.nuget.org/consume/package-restoreに移動し、というセクションを見つけますMSBuild-Integrated Package Restore。それは古い方法であり、新しい方法を使用する必要があるいくつかの理由を示しています。
マフィンマン

このblogのDavid Ebboのブログを参照してください。davidebbo.com/ 2014/01 / …今... "NuGetは常にVSでビルドする前に常にパッケージを復元します。"
timB33

17

私の場合、それはMicrosoft.Build.Bclバージョンと関係がありました。nugetパッケージのバージョンは1.0.21でしたが、プロジェクトファイルは引き続きバージョン1.0.14を指しています。

だから私は.csprojファイルを次のように変更しました:

  <Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
   <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
    <Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
    <Error Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
  </Target>

に:

 <Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
  <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
    <Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
    <Error Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />

そして、ビルドは再び機能していました。


11

TFSを使用している場合

NuGet.exeNuGet.targetsファイルをソリューションの.nugetフォルダから削除します。ファイル自体もソリューションワークスペースから削除されていることを確認します。NuGet.Configファイルを保持して、ソース管理へのパッケージの追加をバイパスし続けます。

ソリューション内の各プロジェクトファイル(.csproj、.vbprojなど)を編集し、NuGet.targetsファイルへの参照をすべて削除します。任意のエディターでプロジェクトファイルを開き、次の設定を削除します。

<RestorePackages>true</RestorePackages>  
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />  
...
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">  
    <PropertyGroup>
        <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

TFSを使用していない場合

.nugetソリューションからフォルダーを削除します。フォルダー自体もソリューションワークスペースから削除されていることを確認します。

ソリューション内の各プロジェクトファイル(.csproj、.vbprojなど)を編集し、NuGet.targetsファイルへの参照をすべて削除します。任意のエディターでプロジェクトファイルを開き、次の設定を削除します。

<RestorePackages>true</RestorePackages>  
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />  
...
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">  
    <PropertyGroup>
        <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

参照:自動パッケージ復元を使用するためのMSBuild統合ソリューションの移行


8

パッケージが間違ったフォルダに復元された可能性はありますか?csprojファイルのパスが正しいことを確認してください。

それらが異なる場合、パッケージが別の場所に復元されていることが原因である可能性があります。これは、次のようなノードの指定でチェックされているNuGet.Configファイルが原因である可能性があります。

<add key="repositoryPath" value="..\..\Packages" />

パッケージが復元されているため、プロジェクトはまだ古い場所を調べています。


1
ファイルの場所を移動したため、パスの問題である可能性があると思いますが、ハードコーディングされたパスがどこにあるのかわかりません。私はprojファイルを調べましたが、すべてのパッケージファイルは次のように相対的であるようです:<Reference Include = "Antlr3.Runtime、Version = 3.5.0.2、Culture = neutral、PublicKeyToken = eb42632606e9261f、processorArchitecture = MSIL"> <SpecificVersion> False </ SpecificVersion> <HintPath> .. \ packages \ Antlr.3.5.0.2 \ lib \ Antlr3.Runtime.dll </ HintPath> </ Reference>
Austin Harris 14

これをweb.configに追加しても役に立たなかった:<add key = "repositoryPath" value = ".. \ .. \ Packages" />
Austin Harris

あなたはそれをweb.configに追加したくありません。NuGet.configファイルを参照していて、相対パスを確認したいとします。csprojファイルに関連するパッケージはどこにありますか?それらは.. \ packagesにありますか?パッケージは正しく復元されているようですが、プロジェクトの場所が間違っています。
infojolt 14

6

同じ問題がありました。私の場合、Microsoft.Bcl.Buildパッケージをインストールすると問題が解決しました。


これも私にとってはうまくいきましたが、正しいパッケージがそのパッケージをインストールすることであるかどうかはわかりません(これは、以下のhenkie14のバージョン変更の回答と同じ効果があるか、単にすべてのターゲットを削除するだけです
Gaz

では1.0.21バージョンのパッケージには、ファイルは、インストールの1.0.14バージョンは、これを固定していません。
FLCL、2016

4

.csprojファイルの以下の行を削除しました

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" 
Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
 <ErrorText>This project references NuGet package(s) that are missing on this computer. 
 Enable NuGet Package Restore to download them.  For more information, see 
 http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" 
Text="$([System.String]::Format('$(ErrorText)', 
'$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

3

1つの解決策は、以下を.csprojファイルから削除することです。

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />

このプロジェクトは、このコンピューターに存在しないNuGetパッケージを参照しています。それらをダウンロードするには、NuGet Package Restoreを有効にします。詳細については、http://go.microsoft.com/fwlink/?LinkID=322105を参照してください。欠落しているファイルは{0}です。


1

これらは私が問題を修正するために使用した手順です:

ソリューションにnugetパッケージを追加するには:

  1. nugetパッケージを参照するプロジェクト(ソリューションではない)を右クリックします。
  2. 選択:nugetパッケージの管理
  3. ポップアップウィンドウで、左側に3つの選択肢があります。[オンライン]> [Microsoft&.NET]を選択すると、Microsoft ASP.NET Web API 2.2パッケージグルーパー(または必要なパッケージ-私のものはこれです)をインストールできます。
  4. 次に、ソリューション(プロジェクトではない)を右クリックし、[ nugetパッケージの復元を有効にする]を選択します 。これにより、パッケージはコンパイル時に自動的にダウンロードされます。

私がしなければならなかったのは、ソリューションのナゲットパッケージの復元を有効にすることだけでした。どうやら他のすべてがすでに正しく設定されていたようです。
schmiddy98 2015

1

私にとっては、作業ソリューションから既存のソリューションに.nugetフォルダーをコピーし、そのコンテンツを参照しただけで機能しました!


1

最初に試すことは、ソリューションを右クリックして、「Nugetパッケージの復元」を選択することです。

うまくいかなかった私の場合、プロジェクトファイルの「インポート」と「ターゲット」の削除に関するいくつかの推奨事項に従いましたが、これは3つのプロジェクトのうち2つで機能しましたが、最後のプロジェクトでは別のエラーが発生しました。

うまくいったのは、パッケージマネージャーコンソールを開いて実行することでした。

Update-Package -reinstall -ProjectName MyProjectName

少し時間がかかりますが、すべてのパッケージが再インストールされるため、プロジェクトは問題なくコンパイルされます


1

同じ問題があります。既存のプロジェクトをコピーしてソリューションディレクトリのフォルダーに転送し、既存のプロジェクトとして空のソリューションに追加したときに発生しました。したがって、csprojファイルを編集して、この特定のコード行を探す必要があります。ほとんどの場合、これは最後の行にあります。

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

その行の後、私はこれらをコメントアウトする必要があります:

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props'))" />
    <Error Condition="!Exists('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets'))" />
  </Target>
  <Import Project="..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets" Condition="Exists('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" />

ソリューションは、プロジェクトに変更があったことを表示します。[Reload All]を選択するだけです。

ここに画像の説明を入力してください その後、私のソリューションを再構築した後、すべてが正常に動作します。


0

クラスライブラリをMVC Webアプリケーションで参照すると、同じ問題が発生しました。

問題は、2つのプロジェクト間でのnugetパッケージのバージョン番号の不一致でした。

例:クラスライブラリのlog4netは1.2.3でしたが、私のWebアプリケーションは1.2.6でした

修正:両方のプロジェクトが同じバージョン番号を参照していることを確認してください。


0

.slnと.csprojの編集は、必ずしもそれほど簡単または望ましいとは限りません。エラーリストを取得すると、パッケージが不足しているプロジェクトを確認できます(また、リファレンスノードは、パッケージがソースコード、リソース、イメージ、またはテキストベースのパッケージでない限り、通常はアセンブリが不足していることを示します)。

最新バージョンのパッケージを使用しない限り、パッケージを削除してから追加することはお勧めできません。それ以外の場合は、常に楽しいものではなく、驚きに備えてください。

たとえば、パッケージがEntityFrameworkの場合、NuGetギャラリーから最新バージョンを取得します。このコメントを書いている時点では6.1.3です。

したがって、状況を処理する最も安全な方法は、不足しているパッケージを1つずつ復元することです。はい、少し苦痛な作業ですが、パッケージのバージョンが異なるために微妙なバグを追跡することは、おそらくもっと不愉快なことです。

これで、EntityFrameworkを不足しているパッケージにすると、パッケージマネージャーコンソールで次のコマンドを発行できます。

PM> Install-Package EntityFramework -Version 6.0.1 

これにより、正しいバージョン、つまりpackages.configで指定されている6.0.1がインストールされます。

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="EntityFramework" version="6.0.1" targetFramework="net451" />
    </packages>

0

これは、csprojファイルとslnファイルが同じフォルダーにあるときに発生しました(愚かです、私は知っています)。slnファイルをcsprojフォルダーの上のフォルダーに移動したら


-1

ソリューションのルートフォルダーに「.nuget」という名前のフォルダーを作成し、このフォルダーに次の内容でファイル「NuGet.Config」を追加しました

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
 <add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>

次に、以下のようにファイル「.nuGet.targets」を作成しました$(MSBuildProjectDirectory).. \

    <!-- Enable the restore command to run before builds -->
    <RestorePackages Condition="  '$(RestorePackages)' == '' ">false</RestorePackages>

    <!-- Property that enables building a package from a project -->
    <BuildPackage Condition=" '$(BuildPackage)' == '' ">false</BuildPackage>

    <!-- Determines if package restore consent is required to restore packages -->
    <RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>

    <!-- Download NuGet.exe if it does not already exist -->
    <DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
</PropertyGroup>

<ItemGroup Condition=" '$(PackageSources)' == '' ">
    <!-- Package sources used to restore packages. By default will used the registered sources under %APPDATA%\NuGet\NuGet.Config -->
    <!--
        <PackageSource Include="https://nuget.org/api/v2/" />
        <PackageSource Include="https://my-nuget-source/nuget/" />
    -->
</ItemGroup>

<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
    <!-- Windows specific commands -->
    <NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
    <PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig>
    <PackagesDir>$([System.IO.Path]::Combine($(SolutionDir), "packages"))</PackagesDir>
</PropertyGroup>

<PropertyGroup Condition=" '$(OS)' != 'Windows_NT'">
    <!-- We need to launch nuget.exe with the mono command if we're not on windows -->
    <NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath>
    <PackagesConfig>packages.config</PackagesConfig>
    <PackagesDir>$(SolutionDir)packages</PackagesDir>
</PropertyGroup>

<PropertyGroup>
    <!-- NuGet command -->
    <NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\nuget.exe</NuGetExePath>
    <PackageSources Condition=" $(PackageSources) == '' ">@(PackageSource)</PackageSources>

    <NuGetCommand Condition=" '$(OS)' == 'Windows_NT'">"$(NuGetExePath)"</NuGetCommand>
    <NuGetCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 $(NuGetExePath)</NuGetCommand>

    <PackageOutputDir Condition="$(PackageOutputDir) == ''">$(TargetDir.Trim('\\'))</PackageOutputDir>

    <RequireConsentSwitch Condition=" $(RequireRestoreConsent) == 'true' ">-RequireConsent</RequireConsentSwitch>
    <!-- Commands -->
    <RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)"  $(RequireConsentSwitch) -o "$(PackagesDir)"</RestoreCommand>
    <BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -p Configuration=$(Configuration) -o "$(PackageOutputDir)" -symbols</BuildCommand>

    <!-- Make the build depend on restore packages -->
    <BuildDependsOn Condition="$(RestorePackages) == 'true'">
        RestorePackages;
        $(BuildDependsOn);
    </BuildDependsOn>

    <!-- Make the build depend on restore packages -->
    <BuildDependsOn Condition="$(BuildPackage) == 'true'">
        $(BuildDependsOn);
        BuildPackage;
    </BuildDependsOn>
</PropertyGroup>

<Target Name="CheckPrerequisites">
    <!-- Raise an error if we're unable to locate nuget.exe  -->
    <Error Condition="'$(DownloadNuGetExe)' != 'true' AND !Exists('$(NuGetExePath)')" Text="Unable to locate '$(NuGetExePath)'" />
    <SetEnvironmentVariable EnvKey="VisualStudioVersion" EnvValue="$(VisualStudioVersion)" Condition=" '$(VisualStudioVersion)' != '' AND '$(OS)' == 'Windows_NT' " />
    <DownloadNuGet OutputFilename="$(NuGetExePath)" Condition=" '$(DownloadNuGetExe)' == 'true' AND !Exists('$(NuGetExePath)')"  />
</Target>

<Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites">
    <Exec Command="$(RestoreCommand)"
          Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" />

    <Exec Command="$(RestoreCommand)"
          LogStandardErrorAsError="true"
          Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" />
</Target>

<Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites">
    <Exec Command="$(BuildCommand)" 
          Condition=" '$(OS)' != 'Windows_NT' " />

    <Exec Command="$(BuildCommand)"
          LogStandardErrorAsError="true"
          Condition=" '$(OS)' == 'Windows_NT' " />
</Target>

<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
        <OutputFilename ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
        <Reference Include="System.Core" />
        <Using Namespace="System" />
        <Using Namespace="System.IO" />
        <Using Namespace="System.Net" />
        <Using Namespace="Microsoft.Build.Framework" />
        <Using Namespace="Microsoft.Build.Utilities" />
        <Code Type="Fragment" Language="cs">
            <![CDATA[
            try {
                OutputFilename = Path.GetFullPath(OutputFilename);

                Log.LogMessage("Downloading latest version of NuGet.exe...");
                WebClient webClient = new WebClient();
                webClient.DownloadFile("https://nuget.org/nuget.exe", OutputFilename);

                return true;
            }
            catch (Exception ex) {
                Log.LogErrorFromException(ex);
                return false;
            }
        ]]>
        </Code>
    </Task>
</UsingTask>

 <UsingTask TaskName="SetEnvironmentVariable" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
        <EnvKey ParameterType="System.String" Required="true" />
        <EnvValue ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
        <Using Namespace="System" />
        <Code Type="Fragment" Language="cs">
            <![CDATA[
            try {
                Environment.SetEnvironmentVariable(EnvKey, EnvValue, System.EnvironmentVariableTarget.Process);
            }
            catch  {
            }
        ]]>
        </Code>
    </Task>
</UsingTask>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.