使用 NuGet 和源代码控制的多人团队

本文介绍了使用 NuGet 和源代码控制的多人团队的处理方法,对大家解决问题具有一定的参考价值

问题描述

我在一个两人团队中,使用 Team Foundation Server 进行源代码控制.我开始了一个新的解决方案.对于该解决方案,我创建了几个项目.其中许多我使用 NuGet 来安装 AutoMapper 和 Unity.然后我右键单击解决方案并选择添加到源代码管理".然后我签入了由此产生的未决更改.

I am on a two-man team using Team Foundation Server for our source control. I started a new solution. For that solution I created several projects. In many of them I used NuGet to install AutoMapper and Unity. I then right clicked on the solution and selected "Add to Source Control". I then checked in the resulting pending changes.

我团队中的另一个人做了最新的,所有的 NuGet 引用对他来说都失败了.

The other person on my team did a get latest and all of the NuGet references are failing for him.

所以,我想我需要添加 packages 文件夹.所以我就这么做了.

So, I figured I needed to add the packages folder. So I did that.

在我这样做之后,NuGet 引用仍然失败(对他而言).

After I did that, the NuGet references are still failing (for him).

另外,当我尝试将 NuGet 包添加到文件时,我现在收到此错误:

Also, when I try to add a NuGet Package to a file I get this error now:

对路径C:srcMyPathToMySolutionpackages epositories.config"的访问被拒绝.

Access to the path 'C:srcMyPathToMySolutionpackages epositories.config' is denied.

我认为这是因为 repositories.config 文件现在处于源代码控制之下(因此在手动签出之前它是只读的).

I assume this is because the repositories.config file is now under source control (so it is read only until manually checked out).

所以,这是我的两个问题:

So, here are my two questions:

  1. 我应如何签入或签入什么,以便在我的同事获取最新版本时 NuGet 包对他有效?
  2. 有没有办法在我需要使用 NuGet 时不必手动签出 NuGet 文件?

我做错了吗?还是说 NuGet 不适合与源代码管理一起使用?

Am I doing this wrong? Or is NuGet not really meant for use with source control?

推荐答案

编辑 2014/03/31:不再需要手动启用基于 MSBuild 的包恢复,另请参阅 http://xavierdecoster.com/migrate-away-from-msbuild-based-nuget-package-恢复.

Edit 2014/03/31: The manual MSBuild-based package restore enablement is no longer needed, see also http://xavierdecoster.com/migrate-away-from-msbuild-based-nuget-package-restore.

编辑 2012/02/07:现在这是 NuGet vsix 的内置功能,称为启用包还原.

有一个 NuGet 包,它被称为 NuGetPowerTools.它向 Visual Studio 中的 NuGet 包管理器控制台添加了两个新命令,其中 Enable-PackageRestore 是您感兴趣的一个.

Obsolete Alternative

There is a NuGet package for that, it's called NuGetPowerTools. It adds two new commands to the NuGet Package Manager Console in Visual Studio, amongst which Enable-PackageRestore is the interesting one for you.

它将添加一个 .nuget 文件夹,其中包含 nuget.exe、nuget.settings.targets 和 nuget.targets.当您运行 enable package restore 时,它​​将枚举您的解决方案中的所有项目,并在项目文件(实际上是 msbuild 文件本身)中添加 import nuget.targets 语句.

It will add a .nuget folder which contains nuget.exe, nuget.settings.targets and nuget.targets. When you run enable package restore, it will enumerate all projects in your solution and add an import nuget.targets statement in the project files (which are actually msbuild files themselves).

每当您构建项目或整个解决方案时,nuget 都会获取该项目/解决方案的所有包,如 packages.config 文件中所定义.这发生在预构建步骤中.

Whenever you build a project or the entire solution, nuget will fetch all packages for that project/solution, as defined in the packages.config file. This happens in a pre-build step.

所以,简而言之:

  1. 请勿托运包裹
  2. 检查配置文件(repositories.config 和 packages.config 文件)
  3. 使用启用包还原
  4. 签入 .nuget 文件夹

每当有人获得源代码时,无论是团队中的其他开发人员还是构建代理,都会指示 msbuild 进程在预构建步骤中获取任何所需的包.

Whenever someone gets the sources, whether that's another developer in the team or a build agent, the msbuild process will be instructed to fetch any required packages in a pre-build step.

此外,当包未提交到 TFS 源代码控制时,您不会遇到 只读标志 问题,或与二进制文件合并冲突.

Also, when the packages are not committed into TFS Source Control, you won't hit the read-only flag issues, or merge conflicts with binary files.

如果您愿意,您还可以查看此方法的基础推理 在我的博客上.

If you want, you can also check-out the underlaying reasoning for this approach on my blog.

这篇关于使用 NuGet 和源代码控制的多人团队的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,WP2

admin_action_{$_REQUEST[‘action’]}

do_action( "admin_action_{$_REQUEST[‘action’]}" )动作钩子::在发送“Action”请求变量时激发。Action Hook: Fires when an ‘action’ request variable is sent.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$_REQUEST['action']引用从GET或POST请求派生的操作。源码(Source)更新版本源码位置使用被使用2.6.0 wp-admin/admin.php:...

日期:2020-09-02 17:44:16 浏览:1173

admin_footer-{$GLOBALS[‘hook_suffix’]}

do_action( "admin_footer-{$GLOBALS[‘hook_suffix’]}", string $hook_suffix )操作挂钩:在默认页脚脚本之后打印脚本或数据。Action Hook: Print scripts or data after the default footer scripts.目录锚点:#说明#参数#源码说明(Description)钩子名的动态部分,$GLOBALS['hook_suffix']引用当前页的全局钩子后缀。参数(Parameters)参数类...

日期:2020-09-02 17:44:20 浏览:1071

customize_save_{$this->id_data[‘base’]}

do_action( "customize_save_{$this->id_data[‘base’]}", WP_Customize_Setting $this )动作钩子::在调用WP_Customize_Setting::save()方法时激发。Action Hook: Fires when the WP_Customize_Setting::save() method is called.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_data...

日期:2020-08-15 15:47:24 浏览:809

customize_value_{$this->id_data[‘base’]}

apply_filters( "customize_value_{$this->id_data[‘base’]}", mixed $default )过滤器::过滤未作为主题模式或选项处理的自定义设置值。Filter Hook: Filter a Customize setting value not handled as a theme_mod or option.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_date['base'],指的是设置...

日期:2020-08-15 15:47:24 浏览:901

get_comment_author_url

过滤钩子:过滤评论作者的URL。Filter Hook: Filters the comment author’s URL.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/comment-template.php:32610...

日期:2020-08-10 23:06:14 浏览:932

network_admin_edit_{$_GET[‘action’]}

do_action( "network_admin_edit_{$_GET[‘action’]}" )操作挂钩:启动请求的处理程序操作。Action Hook: Fires the requested handler action.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$u GET['action']引用请求的操作的名称。源码(Source)更新版本源码位置使用被使用3.1.0 wp-admin/network/edit.php:3600...

日期:2020-08-02 09:56:09 浏览:880

network_sites_updated_message_{$_GET[‘updated’]}

apply_filters( "network_sites_updated_message_{$_GET[‘updated’]}", string $msg )筛选器挂钩:在网络管理中筛选特定的非默认站点更新消息。Filter Hook: Filters a specific, non-default site-updated message in the Network admin.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分$_GET['updated']引用了非默认的...

日期:2020-08-02 09:56:03 浏览:865

pre_wp_is_site_initialized

过滤器::过滤在访问数据库之前是否初始化站点的检查。Filter Hook: Filters the check for whether a site is initialized before the database is accessed.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/ms-site.php:93910...

日期:2020-07-29 10:15:38 浏览:834

WordPress 的SEO 教学:如何在网站中加入关键字(Meta Keywords)与Meta 描述(Meta Description)?

你想在WordPress 中添加关键字和meta 描述吗?关键字和meta 描述使你能够提高网站的SEO。在本文中,我们将向你展示如何在WordPress 中正确添加关键字和meta 描述。为什么要在WordPress 中添加关键字和Meta 描述?关键字和说明让搜寻引擎更了解您的帖子和页面的内容。关键词是人们寻找您发布的内容时,可能会搜索的重要词语或片语。而Meta Description则是对你的页面和文章的简要描述。如果你想要了解更多关于中继标签的资讯,可以参考Google的说明。Meta 关键字和描...

日期:2020-10-03 21:18:25 浏览:1738

谷歌的SEO是什么

SEO (Search Engine Optimization)中文是搜寻引擎最佳化,意思近于「关键字自然排序」、「网站排名优化」。简言之,SEO是以搜索引擎(如Google、Bing)为曝光媒体的行销手法。例如搜寻「wordpress教学」,会看到本站的「WordPress教学:12个课程…」排行Google第一:关键字:wordpress教学、wordpress课程…若搜寻「网站架设」,则会看到另一个网页排名第1:关键字:网站架设、架站…以上两个网页,每月从搜寻引擎导入自然流量,达2万4千:每月「有机搜...

日期:2020-10-30 17:23:57 浏览:1309