通过Gitignore递归地包含Nuget DLL

Jas*_*win 10 git asp.net-mvc gitignore nuget

我正在使用GIT与一个新的ASP.NET MVC项目.我的gitignore文件中有一行忽略dll

*.dll
Run Code Online (Sandbox Code Playgroud)

我想在下面的行中添加一些内容,以包含(即不要忽略)我的NUGET包文件夹中的DLL

  !/packages/*.dll
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是并非所有nuget包都是平等创建的,并且根据所讨论的包,DLL可以嵌套在路径层次结构中的任意数量的级别.似乎我只需要一个递归解决方案:

!/packages/**/*.dll

!/packages/**/*
Run Code Online (Sandbox Code Playgroud)

我还没有找到一个可以通过mysysgit(或git的任何Windows发行版)工作的解决方案.

有没有人知道如何使这项工作?

vcs*_*nes 19

留下您的顶层gitignore单独通过保持*.dll在其中.

.gitignore在packages目录中创建另一个文件并放入!*.dll其中.


Tim*_*ple 9

另一个需要考虑的选择是不在您的存储库中包含您的NuGet dll,而是仅在您第一次构建项目时下载它们.这就是我们对所有NuGet依赖项所做的事情.

UPDATE

Nuget现在可以处理这个,而无需手动创建自己的构建事件.请参阅此页面上的详细信息:http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages


原答案:

我们将NuGet.exe应用程序放在我们的解决方案下的tools文件夹中,然后将以下内容添加到我们的项目预构建事件中.

"$(SolutionDir)Tools\NuGet.exe" install "$(ProjectDir)packages.config" -o "$(SolutionDir)Packages"
Run Code Online (Sandbox Code Playgroud)

我们第一次构建应用程序时会下载所有依赖项,但是通过后续构建,NuGet足够智能,可以看到它们已经存在于正确的版本中并跳过它们.

  • 更新:Nuget通过Nuget Package Restore支持此OOB. (3认同)