从NuGet检入包到版本控制?
在NuGet之前,检查项目中使用的所有外部DLL是普遍接受的“最佳实践”。 通常在Libs
或3rdParty
目录中。
在使用NuGet时,我是否应该检查packages
目录,还是有办法让MSBuild从nuget feed中自动下载所需的软件包?
没有
由于这个问题被问到,现在有一个简单的工作stream程来使用NuGet,而不需要将包提交到源代码pipe理
从你的包pipe理器控制台你需要安装'NuGetPowerTools' :
Install-Package NuGetPowerTools
然后,为了使您的项目能够支持包恢复,您需要运行另一个命令:
Enable-PackageRestore
现在,您已经准备好提交代码库而不使用packages文件夹。 前面的命令改变了你的项目文件,所以如果包丢失,它们会自动下载并添加。
资源
使用NuGet而不提交包到源代码pipe理
是。 考虑“包”目录是相当于你在你的问题中提到的“库”目录。 这是我个人对我的OSS项目采取的方法。
我们正在研究允许MSBuild自动下载所需软件包的function,但是这个function还没有实现(从NuGet 1.1开始)。
我认为有些人可能已经自己实现了这些function,但是我们的计划是希望能够在NuGet 1.2或1.3中内置这个function。
尽pipe这里有所有的答案,但在“某种”版本控制之下没有所有的依赖关系仍然是一个简单的可怕的解决scheme。
对于GIT来说,这意味着GIT-LFS。
最近与NPM的情节显示了为什么:如果你所依赖的互联网存储库中断,不可用等等,那么你被搞砸了吗?
你不再能够build立你的东西,因此无法交付。
自问这个问题以来,我已经采取了以下方法,以便不必检查Toplovel Packages目录。
在一个顶级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事件下载依赖关系。 您不需要将包文件夹放在代码库中,所有的依赖关系将在构build时下载和/或更新。 这可能是一个解决方法,但看起来不错。 有关详细信息,请参阅以下博文: http : //blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html
截至09/20/13,有一种叫做“Nuget Restore”的东西。 如果你愿意的话,你实际上不必检查包文件夹。 (特别是如果您使用DVCS)
看看这个:使用NuGet没有提交包到源代码pipe理http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
这篇文章已经变得非常过时了。 答案仍然没有,但解决scheme已经改变。 从NuGet 2.7开始,您可以启用自动软件包还原function,而不需要在源代码中包含NuGet.exe文件(至less这是不可取的),如果您使用任何现代DVCS,则可以忽略软件包文件夹。 如果您需要任何特殊的定制,您可以在解决scheme根目录中创build一个nuget.config文件。