该项目引用了此计算机上缺少的NuGet软件包


313

我有一个昨天运行的ASP.NET MVC5应用程序,现在尝试构建时出现此错误:

该项目引用了此计算机上缺少的NuGet软件包。

我选中了两个选项,它们允许nuget自动下载并安装已丢失的软件包(已选中/已打开)。我还尝试删除了packages文件夹中的所有文件,然后让nuget重新下载它们。另外,当我打开nuget并查找更新时,它说没有安装任何内容。我想不出什么其他方法来解决这个令人讨厌的问题。


1
我还通过右键单击项目并选择该选项来启用nuget恢复。然后,它添加了一个nuget文件夹,并在该文件夹中添加了三个项目,但无济于事。我已经尝试过重新构建,但仍然收到上面的相同错误。
奥斯汀·哈里斯

您的解决方案是否包括.nuget文件夹,您是否已将NuGet更新到最新版本?在这里看到:stackoverflow.com/questions/18833649/...
大卫·布拉班特

是的,尝试了一下,但并没有解决我的构建错误消息问题。
奥斯汀·哈里斯

此错误的另一个原因是The operation has timed out.错误。在构建期间。您需要检查生成日志或Visual Studio Online生成失败信息屏幕中的“ 诊断”选项卡。
2015年

没有一种解决方案对我有用。我正在从一个仓库下载文件,并且软件包以第一个项目的正确文件结构恢复,第二个项目找不到它们。检查.csproj,表明正在使用正确的相对路径,因此我迷失了尝试解决此问题的方法。github.com/DanJ210/ProgrammersTest
Daniel Jackson

Answers:


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]似乎也将其还原。
罗伯特·泰勒

3
这是非常难以置信的。微软为什么使所有事情变得如此困难?
dimiguel

10
如果可以将其删除,那么为什么要放在第一位呢?
OK999

1
OK9999,在某一点上,您必须从Visual Studio的早期版本中启用它,方法是右键单击解决方案,然后选择“启用NuGet软件包还原”,这是通过旧方法完成的。我们不再需要了
劳伦·保尔森

3
我喜欢只涉及删除内容的解决方案。
托德·梅尼尔

85

一种解决方案是从.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. 右键单击项目。重新加载项目。

当您将一个项目从一个地方移到另一个地方时,效果很好。
院长徐

4
@IvanSantiago 它上面已经回答了相同的解决方案..!否决..!
杰克

2
@ClintEastwood我的回答解释了如何去做。就是这样。如果用户正在寻找如何我的答案了吧,在上面的答案对比。
伊万·圣地亚哥

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文件移到目录结构的上一级,并且不得不从“ .. \ .. \ packages \ ...”更改为“ .. \ packages \ ...”。
tmgirvin 2015年

2
我有一个类似的问题,但确实很奇怪。我在子解决方案模块中使用它,因此在该解决方案中可以使用,但是当我从另一个解决方案中引用该解决方案时,程序包位于另一个位置。我在整个.csproj中将.. \ packages更改为$(SolutionDir)packages,并进行了修复。
JoeNCA

2
如果您不想手动处理.csproj文件,我发现记下您为该项目安装的所有nuget软件包的记录,然后删除它们并重新安装可以为我解决此问题。当我遇到此问题时,我试图从解决方案中删除一个项目以放入其自己的git存储库中。
WiteCastle

这是否意味着您的.csproj与.sln文件处于同一级别?
Simon_Weaver

@Simon_Weaver 在这种情况下,您.csproj相对于您的位置.sln并不重要。重要的是您.csproj所引用的内容是否已移至其他位置。如果是这样,则需要对其进行修复。如果将“ .csproj”完整保留其引用的所有内容,但仍将.sln其保留在原处,则必须将.sln文件固定到.csproj-es 的新位置,但无需编辑.csproj文件。
Nikita G.

22

我可以通过右键单击我的解决方案,然后单击“ 启用NuGet软件包还原”选项来轻松解决此问题。

(PS:请确保您具有适用于Visual Studio 2013的Nuget从工具安装->扩展和更新-> Nuget软件包管理器。

希望能帮助到你。


7
这是还原nuget包的旧方法,应避免使用。
松饼人

2
@TheMuffinMan:能否请您说明什么是新方法,以及为什么应避免使用这种方法(考虑到VS 2013错误输出会告诉您执行此操作)?
CantrianBear

2
@CantrianBear导航到此页面docs.nuget.org/consume/package-restore并找到名为的部分MSBuild-Integrated Package Restore。那是旧方法,它列出了您应该使用新方法的一些原因。
松饼人

请参阅David Ebbo在此blog.davidebbo.com/2014/01/…上的博客。现在...“ NuGet现在总是在使用VS构建之前恢复包。”
timB33 '19

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

将此添加到web.config并没有帮助:<add key =“ repositoryPath” value =“ .. \ .. \ Packages” />
Austin Harris

您不想将其添加到web.config。我指的是NuGet.config文件,您想检查相对路径。您的软件包相对于csproj文件在哪里?它们在.. \ packages中吗?听起来好像软件包已正确还原,但是您的项目在错误的位置。
infojolt 2014年

6

我遇到过同样的问题。以我为例,安装Microsoft.Bcl.Build包可解决此问题。


这对我也很有效-但我不知道是否正确的做法是安装该软件包(与下面的henkie14版本更改答案具有相同的作用,或者只是删除所有这些目标-它们实际上在做有用的事情吗?)
Gaz

1.0.21版本中没有软件包的文件中,1.0.14版本的安装修复了此问题。
FLCL

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>


1

这些是我用来解决问题的步骤:

要将nuget软件包添加到您的解决方案中:

  1. 右键单击要引用nuget包的项目(不是解决方案)。
  2. 选择:管理nuget程序包
  3. 在弹出窗口的左侧,您有三个选择。如果选择“ 在线”>“ Microsoft&.NET”,则将能够安装Microsoft ASP.NET Web API 2.2包分组程序(或所需的任何包-我的就是这个)。
  4. 现在,右键单击您的解决方案(不是项目),然后选择 Enable nuget package restore。这将导致在编译时自动下载软件包。

我要做的就是为解决方案启用块金包还原。显然其他所有内容均已正确设置。
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')" />

您的解决方案将提示您的项目进行了更改,只需选择全部重载即可:

在此处输入图片说明 然后,在重建我的解决方案后一切正常。


0

当我将类库引用到我的MVC Web应用程序中时,我遇到了同样的问题,

问题是两个项目之间的nuget软件包版本号不匹配。

例如:我的课程库的log4net为1.2.3,但我的webapp的为1.2.6

修复:只需确保两个项目都引用了相同的版本号。


0

编辑.sln和.csproj并不总是那么容易或理想。获得错误列表后,您可以查看哪些项目缺少程序包(此外,“引用”节点通常指示缺少程序集,除非程序包是源代码,资源,图像或仅基于文本的程序包)。

除非使用最新版本的软件包,否则删除并添加软件包不是一个好主意。否则,要为意外做好准备,但并不总是惊喜。

如果说软件包是EntityFramework,那么从NuGet gallery中您可以获取最新版本,在撰写本文时,它是6.1.3

因此,处理这种情况的最安全方法可能是逐个还原丢失的软件包。是的,这有点痛苦,但是由于不同的软件包版本而追逐细微的错误可能更令人不快。

如此说来,再让EntityFramework作为缺少的包,您可以在Package-Manager控制台中发出以下命令:

PM> Install-Package EntityFramework -Version 6.0.1 

这将安装正确的版本,即6.0.1,这是在packages.config中指定的版本:

    <?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>

然后在$(MSBuildProjectDirectory)下创建文件'.nuGet.targets'.. \

    <!-- 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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.