在ASP.NET中引用DLL而不使用\Bin或GAC

在ASP.NET中引用DLL而不使用\Bin或GAC,asp.net,dll,reference,web-config,Asp.net,Dll,Reference,Web Config,我在源代码管理(Subversion)下有一个ASP.NET项目。出于各种原因,我不想将\Bin目录或其内容添加到源代码管理中,因此我将其svn:ignored。DLL是在VisualStudio构建期间加载到这里的,我可以从一个干净的目录开始和/或删除该目录的所有内容,并且仍然可以成功构建 有两种方法可供我参考代码以包含在项目中: 在Web.config元素//configuration/configSections/system.Web/compilation/assemblies中。我可以

我在源代码管理(Subversion)下有一个ASP.NET项目。出于各种原因,我不想将\Bin目录或其内容添加到源代码管理中,因此我将其svn:ignored。DLL是在VisualStudio构建期间加载到这里的,我可以从一个干净的目录开始和/或删除该目录的所有内容,并且仍然可以成功构建

有两种方法可供我参考代码以包含在项目中:

  • 在Web.config元素//configuration/configSections/system.Web/compilation/assemblies中。我可以通过这种方式访问GAC中的任何DLL。我对所有系统DLL都这样做
  • 在VS解决方案中,有一个设置允许我指定对解决方案中其他项目的包含引用
  • (请注意,这不同于非web项目,其中对外部依赖项的所有引用都存储在项目文件中。VS web项目没有项目文件,因此它们必须存储在其他地方。)

    现在,我有一个第三方编译的DLL,我想包括在项目中。不幸的是,我发现的所有引用选项似乎都不适合我:

  • 除非GAC中存在DLL,否则通过web.config/system.web/compilation/assemblies引用不起作用;不能使用文件路径。我真的希望避免GAC依赖,因为这意味着在每台目标机器上都要多做一步才能使项目正常工作
  • 我还没有找到在解决方案中包含文件引用的方法,就像我可以处理项目引用一样
  • 每当我使用VS的“添加引用”对话框添加文件引用时,它只会将DLL复制到\Bin目录。这对我不起作用,因为我的\Bin目录不是跨系统持久的

  • 是否有其他方法可以引用DLL文件并使其保持不变?

    到目前为止,我想到的唯一方法是让我的NAnt构建脚本在构建之前将DLL从外部(版本化)lib目录复制到\Bin目录。我不太喜欢这一点,因为它引入了一个Visual Studio之外的流程依赖关系:开发人员必须确保在尝试在内部构建库之前复制了该库,而从技术上讲,在步骤3中会发生更多的情况。Visual Studio将DLL复制到\Bin目录,并添加包含原始DLL路径的name.DLL.refresh文件。使用SourceSafe,.refresh文件受版本控制,因此当您安装新系统并从SourceSafe获取最新代码时,Visual Studio可以从指定位置查找并复制DLL。您应该能够将.refresh文件放入svn中,并使所有内容正常工作


    另外,我通常会在我的项目目录上方创建一个\Common目录,我将DLL放在该目录中,并将该目录包括在解决方案(和源代码管理)中,以便源代码管理中的每个项目版本都有正确的DLL。

    我在源代码管理中保存没有源代码的第三方程序集。在项目之外的自己的目录中—`C:\Projects\3rdPartyAssembly',这样任何需要它们的项目/开发人员都可以引用它们。

    项目引用存储在.csproj或.vbproj文件中,该文件应受源代码控制。.refresh文件完全不相关,只是studio的一个辅助文件。如果创建项目或解决方案的本地目录,并将GAC中尚未存在的所有编译引用存储在此目录中,则可以将该目录添加到源代码管理中,并直接从那里进行引用。通过这种方式,所有开发人员在执行下一次编译时都保证拥有.dll的最新副本(来自源代码管理),并且它永远不会影响/bin

    让您的开发人员“获取最新版本”。。。那件事你得靠自己。我还没弄明白


    也许是另一个备忘录。

    如果您正在进行任何类型的认真开发,我建议您从网站项目迁移到web项目,因为这允许您在整个解决方案中以相同的方式管理这些依赖关系


    但是,假设您不能这样做,请将需要从web项目引用的所有程序集放在某个文件夹中(例如lib\web),并向web项目添加预生成事件,该事件将该文件夹的内容复制到web目录的bin文件夹中。现在,只要您想向web项目添加依赖项,就可以将其放到lib\web文件夹中,并添加引用。每当您构建时,所有引用的程序集都将复制到该文件夹中,这样您就可以删除bin文件夹或进行干净的签出,而不会出现任何问题。

    我想知道这一点。但是,要将.refresh复制到SVN中,我必须有\bin,如果有\bin,我也可以在其中复制DLL。如果我错了,请纠正我,但即使在解决方案中使用\Common,您仍然必须手动将DLL和/或.refresh复制到\bin中,对吗?通过“添加引用”添加DLL时,.refresh会自动创建。只要你把它放在源代码管理中,并且在所有机器上把DLL放在同一个地方,一切都能正常工作。其他计算机从源代码管理下载.refresh,并在生成过程中从指定位置复制DLL。将.refresh放在源代码管理中而不是DLL中的优点是,在生成过程中不会触及.refresh文件。DLL是,这会导致每次构建时都进行不必要的签出。但是如何使对DLL的引用保持在项目中呢?这是我问题的关键。对不起,我不确定我是否理解你。通过选择“浏览”选项卡,可以以与项目引用相同的方式包含文件引用。它确实会将其复制到bin目录,但仍保留引用。实际上,在我的测试中,它不会在\bin目录中存在文件之外保留引用。如果关闭解决方案并删除DLL/.refr