NuGet / MSBuild在没有HintPath

时间:2016-08-05 01:34:58

标签: c# .net visual-studio msbuild

我已编辑Global nuget.config以使用单个包文件夹。

我有一个由VS2015创建的新的空白C#控制台项目。我添加一个NuGet引用,例如Newtonsoft.Json,然后VS创建一个packages.config并将Newtonsoft.Json列为一个包。

这会添加到.csproj文件中。

<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\..\..\CxCache\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> <Private>True</Private> </Reference>

构建项目时,Newtonsoft.Json二进制文件将复制到本地bin文件夹中。如果我从本地bin中删除Newtonsoft.Json dll,它将在构建后重新复制。

但是我不想在csproj中使用HintPath属性(不想检查回购)所以我想,我应该能够删除HintPath并且它会正常工作。我从.csproj中删除了HintPath行,并从本地bin中删除了Newtonsoft.Json dll。

这次构建时,全局nuget包文件夹中的Newtonsoft.Json二进制文件不会复制到本地bin。有工作吗?

1 个答案:

答案 0 :(得分:1)

Bin 文件夹( TargetDir ) - 您构建的文件夹不应该是源代码管理的一部分。您需要 HintPath ,因为没有它,IDE将首先检查GAC,然后它将检查 TargetDir ,然后它将检查...它可能会发现完全不同的Newtonsoft dll版本驱动器上的某个版本,错误的文件。

您需要更正您的设置 - 不要将任何bin文件夹签入源控件。您应该具有分支结构并在分支下具有 packages 文件夹,并且分支中的所有解决方案都可以使用它。您可以签入整个文件夹,这样解决方案每次都不需要下载 - 这没关系。但永远不要检查输出。请参阅 - HintPath 可以包含相对路径,以便您随意使用所需的结构。明天,您可以将分支移动到源控件中的不同位置,并且相对路径将保持有效。当然 - 你需要 HintPath