【问题标题】:ASP.NET and Visual Studio - Adding project references vs Bin Folder DLLASP.NET 和 Visual Studio - 添加项目引用与 Bin 文件夹 DLL
【发布时间】:2010-12-15 07:00:34
【问题描述】:

我昨天刚开始一份新工作,这只是我在 ASP.NET 工作的第二份工作。我们正在设置我的开发盒,并且在使用 Telerik 等一些第三方组件时遇到了问题。我注意到他们安装了这些第三方工具,查找 DLL 文件,将它们复制到 bin 中,然后添加对指向 BIN 中文件的项目。对我来说,这似乎不是正常的做法。

我的印象是,如果你只是在 bin 文件夹中转储一个 DLL,你不需要添加引用,它是可用的?原因是,在我上一份工作中,我们使用了一些内部构建的类库来进行数据访问,并且只是在我们制作的任何新网站(不是 web 应用程序)中删除了 DLL。我不记得每次都必须添加引用才能使其工作。

那么,有人能解释一下如何向您的网络应用添加第三方引用的最佳做法吗?您是否从系统中安装 DLL 的任何位置添加引用?如果是这样,您是否检查本地复制以便将其复制到垃圾箱?您是否只是将 dll 复制到 bin 中,仅此而已?您是否将 dll 复制到 bin 中,然后在其中添加对它的引用?

抱歉,我确信这似乎是一个简单的问题,但我对我见过的两种看似不同的方法感到困惑。

【问题讨论】:

    标签: asp.net visual-studio reference


    【解决方案1】:

    这取决于您的项目是如何设置的。如果您想预编译您的站点(并让 Intellisense 正常工作),您必须有一个 Visual Studio 参考。但是任何放在 bin 文件夹中的东西都将在运行时由 ASP.NET 自动加载...因此可以在后面的代码中访问该程序集的控件/对象,而无需添加项目引用。

    对于小型项目,我只是将 DLL 放入 bin 并添加引用。对于更复杂的站点/项目,我有一个专用的“库”文件夹,用于存放第三方插件和代码。

    【讨论】:

    • 好吧,这是有道理的。现在,我想扩大一点。我从源安全中提取的项目列出了引用,但 BIN 文件夹是空的 - 所以(某些)第三方程序集显示错误,因为它无法使用其他程序集找到它们。我假设开发站必须安装这些组件并修复引用是正常的?
    【解决方案2】:

    我们使用 Subversion 对我们的第 3 方程序集进行版本控制,然后通过 svn:externals 将它们下拉到相关解决方案或项目的子目录中,然后引用它们(并复制到 bin 中)。

    这提供了很多好处:

    1. 构建服务器更快乐,需要更少的维护并且更不脆弱。
    2. 我们有发布历史,可以通过在每个 svn:external 上设置修订号来明确控制每个解决方案/项目的版本控制。例如,您的主干代码可能使用的是最新的 Telerik 版本,但您的发布分支使用的是旧版本。
    3. 我们可以为不同的项目共享第 3 方程序集,并确信他们使用的是正确的版本。
    4. 我们不依赖开发人员安装或升级到正确的版本,但他们仍然可以添加和测试新版本而不会干扰其他项目(假设您已明确定义了修订版)
    5. 我们可以测试新版本,但如果出现问题,可以轻松返回。

    所以需要多做一些设置工作,但我认为这是值得的。请注意,我们不对 bin 和 obj 目录进行版本控制 (svn:ignore),并且第 3 方程序集位于同一个 Subversion 存储库中,由相对路径引用。

    FWIW:Subversion 1.6.6 为基于文件的 svn:externals 修复了一个恼人的错误。这意味着您可以从一个目录中选择一个或多个文件(例如程序集),而不必拉下整个目录。

    2013 年更新

    随着 NuGet 的兴起,在选择使用 svn:externals 之前,请考虑通过本地服务器使用 hosting your own feed,因为它为您提供了所有相同的好处,而且它通过扩展管理器融入 Visual Studio 并提供更好的信息和元数据,例如能够在有新版本时通知开发人员。

    唯一需要注意的是使用 Win2008 或更高版本的服务器托管您的提要,因为我在使用带有 Windows 身份验证的 SSL 来保护提要的旧 Win2003 服务器上遇到了一些问题。我认为这是由于 Win2003 中使用的 IIS 版本较旧,但无法验证。

    【讨论】:

    • 谢谢,感谢您提供的附加信息。将来可能会派上用场。
    • 我们做同样的事情,只是我们称我们的文件夹为“包含”。这些文件被签入源代码管理,因此可以使用项目提取正确的版本。引用会添加到“includes”文件夹中。
    【解决方案3】:

    通常我只是把它们扔进垃圾箱,除非它是不那么简单的东西的一部分。例如,Sitecore 会自行安装并有几个文件夹,它喜欢使用这些文件夹来放置自己的一些代码,以提供一些重要的示例。

    【讨论】:

      【解决方案4】:

      Si 在那里非常正确。 另外:保留您的 bin 文件夹以获取构建/编译的结果。就像之前所说的使用“库”文件夹链接到。我什至用 devexpress 做到这一点。

      通常通过安装 devexpress,它会在 GAC 中安装其 dll,您可以像引用标准 .Net dll 一样引用它们。但是对于版本控制,使用库文件夹要容易得多。

      通过这种方式,您可以确保每个人都使用相同版本的 devexpress(在 sourcesafe 中的那个)来测试他们的代码,并且在您的机器上编译的代码问题会更少,但在另一个。

      【讨论】:

        【解决方案5】:

        我总是更喜欢有项目引用而不是 DLL 引用。以下是它的主要原因。

        • 正在添加其他项目的引用的项目将不是最新的。
        • 对所引用项目的任何更改都不会直接反映。用户必须手动删除旧参考并添加新参考。

        【讨论】:

          猜你喜欢
          • 2012-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-13
          • 1970-01-01
          相关资源
          最近更新 更多