在NuGet之前,人们普遍接受'best practice'来签入项目中使用的所有外部DLL . 通常位于 Libs 或 3rdParty 目录中 .
Libs
3rdParty
在使用NuGet时,我是否应该在 packages 目录中办理登机手续,或者MSBuild是否有办法从nuget Feed自动下载所需的软件包?
packages
由于这个问题被问到,现在有一个简单的工作流程来使用NuGet而无需将包提交给源代码控制
从包管理器控制台,您需要安装 'NuGetPowerTools' :
Install-Package NuGetPowerTools
然后,要使项目支持包还原,您需要运行另一个命令:
Enable-PackageRestore
现在,您已准备好在没有packages文件夹的情况下提交代码库 . 上一个命令更改了项目文件,因此如果缺少包,则会自动下载并添加 .
Using NuGet without committing packages to source control
是 . 将“packages”目录视为与您在问题中提到的“libs”目录等效 . 这是我个人对我的OSS项目采取的方法 .
我们正在研究允许MSBuild自动下载所需软件包的功能,但尚未实现(从NuGet 1.1开始) .
我认为有些人可能已经自己实现了这些功能,但我们的计划是考虑将这个功能内置到NuGet 1.2或1.3中 .
尽管这里有所有的答案,但它仍然是一个简单的'糟糕的解决方案,没有将所有依赖项置于“某种”版本控制之下 .
对于GIT,这意味着GIT-LFS .
NPM最近的一集说明了原因:如果您所依赖的互联网存储库中断,不可用等等,那么您是不是已经搞砸了?
你不再能够 Build 你的东西 - 因此无法提供 .
自从提出问题以来,我已经采用了以下方法,因此我无需检入toplovel Packages 目录 .
在toplevel build.msbuild文件中:
<Target Name="NuGet"> <ItemGroup> <NuGetPackage Include="*\packages.config" /> </ItemGroup> <Exec Command='libs\NuGet.exe install "%(NuGetPackage.FullPath)" -o Packages' /> <!-- optional for project that has JavaScript content --> <CreateItem Include="Packages\*\Content\Scripts\*"> <Output TaskParameter="Include" ItemName="NuGetJSFiles"/> </CreateItem> <Copy SourceFiles="@(NuGetJSFiles)" DestinationFolder="MainProj\Scripts\" OverwriteReadOnlyFiles="true" SkipUnchngedFiles="true" /> <Delete Files="MainProj\Scripts\.gitignore" /> <WriteLinesToFile File="MainProj\Scripts\.gitignore" Lines="%(NuGetJSFiles.Filename)%(NuGetJSFiles.Extension)" / <Delete Files="@(PostNuGetFiles)" /> </Target>
在每个project.csproj文件中
<Target Name="BeforeBuild"> <Error Condition="!Exists('..\Packages\')" Text="You must run > msbuild build.msbuild to download required NuGet Packages" /> <!-- optional for project that has JavaScript content --> <ReadLinesFromFile File="Scripts\.gitignore"> <Output TaskParameter="Lines" ItemName="ReqJSFiles" /> </ReadLinesFromFile> <Message Text="@(ReqJSFiles)" /> <Error Condition="!Exists('Scripts\%(ReqJSFiles.Identity)')" Text="You must run > msbuild build.msbuild to download required NuGet JS Package - Scripts\%(ReqJSFiles.Identity)" /> </Target>
当这个问题最初发布和回答时,我意识到现实情况有所不同,但幸运的是答案有所改变 . 现在可以使用NuGet通过MSBuild使用Pre-Build事件下载依赖项 . 您不需要将packages文件夹放在代码存储库中,所有依赖项都将在构建时下载和/或更新 . 它可能是一种解决方法,但它看起来不错 . 有关详细信息,请参阅以下博文:http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html
自2013年9月20日起,有一种叫做“Nuget Restore”的东西 . 如果您愿意,您实际上不必签入包文件夹 . (特别是如果你使用的是DVCS)
看看这个:使用NuGet而无需将包提交给源代码控制http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
这篇文章已经过时了 . 答案仍然没有,但解决方案已经改变 . 从NuGet 2.7开始,您可以启用自动包恢复,而不在源中包含NuGet.exe文件(至少可以说这是不可取的),如果您使用任何现代DVCS,则可以忽略packages文件夹 . 如果需要任何特殊自定义,可以在解决方案根目录中创建nuget.config文件 .
http://docs.nuget.org/docs/reference/package-restore
此外,使用新的csproj格式,您可以避免额外的nuget.config文件,因为现在已集成 . 请查看这篇文章,该文章更好地解释了:
Should .nuget folder be added to version control?
7 回答
没有
由于这个问题被问到,现在有一个简单的工作流程来使用NuGet而无需将包提交给源代码控制
从包管理器控制台,您需要安装 'NuGetPowerTools' :
然后,要使项目支持包还原,您需要运行另一个命令:
现在,您已准备好在没有packages文件夹的情况下提交代码库 . 上一个命令更改了项目文件,因此如果缺少包,则会自动下载并添加 .
来源
Using NuGet without committing packages to source control
是 . 将“packages”目录视为与您在问题中提到的“libs”目录等效 . 这是我个人对我的OSS项目采取的方法 .
我们正在研究允许MSBuild自动下载所需软件包的功能,但尚未实现(从NuGet 1.1开始) .
我认为有些人可能已经自己实现了这些功能,但我们的计划是考虑将这个功能内置到NuGet 1.2或1.3中 .
尽管这里有所有的答案,但它仍然是一个简单的'糟糕的解决方案,没有将所有依赖项置于“某种”版本控制之下 .
对于GIT,这意味着GIT-LFS .
NPM最近的一集说明了原因:如果您所依赖的互联网存储库中断,不可用等等,那么您是不是已经搞砸了?
你不再能够 Build 你的东西 - 因此无法提供 .
自从提出问题以来,我已经采用了以下方法,因此我无需检入toplovel Packages 目录 .
在toplevel build.msbuild文件中:
在每个project.csproj文件中
当这个问题最初发布和回答时,我意识到现实情况有所不同,但幸运的是答案有所改变 . 现在可以使用NuGet通过MSBuild使用Pre-Build事件下载依赖项 . 您不需要将packages文件夹放在代码存储库中,所有依赖项都将在构建时下载和/或更新 . 它可能是一种解决方法,但它看起来不错 . 有关详细信息,请参阅以下博文:http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html
自2013年9月20日起,有一种叫做“Nuget Restore”的东西 . 如果您愿意,您实际上不必签入包文件夹 . (特别是如果你使用的是DVCS)
看看这个:使用NuGet而无需将包提交给源代码控制http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
这篇文章已经过时了 . 答案仍然没有,但解决方案已经改变 . 从NuGet 2.7开始,您可以启用自动包恢复,而不在源中包含NuGet.exe文件(至少可以说这是不可取的),如果您使用任何现代DVCS,则可以忽略packages文件夹 . 如果需要任何特殊自定义,可以在解决方案根目录中创建nuget.config文件 .
http://docs.nuget.org/docs/reference/package-restore
此外,使用新的csproj格式,您可以避免额外的nuget.config文件,因为现在已集成 . 请查看这篇文章,该文章更好地解释了:
Should .nuget folder be added to version control?