c# - 添加对 C# 项目的引用以使其与版本控制兼容的正确方法

标签 c# visual-studio dll version-control

在将第 3 方库或内部开发的库添加到 C# 项目时,我通常只在 Visual Studio 解决方案浏览器中添加引用。但是,这会创建对库的绝对路径引用。当另一台计算机上的另一位开发人员 checkout 代码时,他们可能不会在那些确切的文件夹位置中拥有这些库。

Where do you put your 3rd party libraries?建议将第 3 方库保存在解决方案文件夹(即存储库文件夹)内的文件夹中。这对我来说很有意义。但是,当我添加引用时,它们仍然是绝对路径引用。 Changing C# .dll references from absolute to relative提供了一个解决方案,但是,手动编辑 .csproj 文件真的是可行的方法吗?我读过不建议乱用 .csproj 文件。另外,我在对该问题的评论中看到,如果您的库不在项目文件夹之上(因此在我的情况下,我在项目文件夹中创建了一个依赖项文件夹,而不是解决方案文件夹),那么 VS 应该通过以下方式使路径引用相对默认,但在我的案例中没有发生。

然后是关于内部开发库的问题。在我的例子中,我有一个实用程序项目,它具有我需要在多个解决方案中使用的功能。我宁愿不必在依赖它的每个项目中手动更新库。如果我使用引用的绝对路径,这不是问题,但是使用版本控制会发生什么?在我链接到的第一个问题中,一个较低的答案建议使用一个名为 Sync Toy 的程序。确保将库复制到引用它的依赖项文件夹的所有项目中。这是一个明智的做法吗?

最后,当我添加引用时,最后一点可能太不相关而无法放在同一个问题中,但默认情况下它会将库复制到构建时的输出目录。但这意味着当我部署项目时,我必须复制所有这些额外的 dll 文件。有没有办法避免这种情况并将库嵌入到输出 .exe 中?

最佳答案

引用路径,绝对还是相对?

当您通过References > Add Reference > Browse > Browse… 添加引用时,Visual Studio 会将库的相对路径保存在.csproj.

但是,如果您在 Properties 窗口中查看引用属性,Visual Studio 会向您显示库的绝对路径(我不知道为什么有人认为这样做是个好主意):

Solution explorer

Properties window

Project file

这已经在 Visual Studio 2008 和 2015 中进行了测试。

公共(public)图书馆,如何共享?

如果您有一个公共(public)库,您需要在解决方案(而不是项目)之间共享,我建议,如果可能的话,创建your own NuGet feed并加以利用。

您可能需要远程提要,而不是本地提要;有很多工具可以创建和维护一个(例如 TeamCity )。

库更新了吗?将其推送到您的内部 NuGet 服务器并享受更新。

四处移动程序集

when I add the reference, but default it coies the library to the output directory on building

好吧,这就是它在 .NET 中的工作方式。

that means when I deploy the project I have to copy all those additional dll files. Is there a way to avoid this and embed the library into the output .exe?

虽然合并所有内容是可能的(检查ILMerge),但我不推荐这样做,不值得这么麻烦,因为:

如果您必须手动复制东西以进行部署,那您就错了。您应该创建一个脚本或安装程序(取决于项目类型和您必须执行的操作)以将已部署的应用程序作为一个整体移动。

关于c# - 添加对 C# 项目的引用以使其与版本控制兼容的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34330872/

相关文章:

windows - 如何在 Windows 应用程序中对加扰数据包进行逆向工程?

c# - 如何在 Entity Framework Core 中使用复数 DbSet 属性名称搭建 DbContext?

c# - 扩展大值

c# - 使用 web api,您将如何创建一个采用 ID 列表的方法?

c++ - "libstdc++-6..."没有可用的源

dll - 当使用junit4 + powermock 执行所有测试套件时,我收到错误 : swt-win32-3650. dll 已加载到另一个类加载器中

c# - 在SQL Server 2005上使用System.Transactions的TransactionInDoubtException

c# - 如何在 C# 中的纯字符串中插入/删除连字符?

c# - 我可以通过编译器选项传递 VisualStudio 版本名称吗?

visual-studio - 将 Visual Studio 2013 解决方案升级到 Visual Studio 2015