【问题标题】:How do references work in ASP.NET WebForms websites (not web applications)?引用在 ASP.NET WebForms 网站(不是 Web 应用程序)中如何工作?
【发布时间】:2018-05-23 22:14:37
【问题描述】:

我已经接管了一个旧的 ASP.NET 网站(而不是一个 Web 应用程序),但由于以下原因,我无法在我们的 CI 环境中构建它对Ajax Control Toolkit 的未解决引用。

我在本地开发机器上看到了同样的错误,可以通过手动添加对 AjaxControlToolkit.dll 的引用来修复它(项目的 NuGet packages.config 文件引用了 Ajax Control Toolkit)。

但是,ASP.NET 网站没有 .csproj 文件(与 Web 应用程序不同),因此进行此更改似乎不会更新源代码树中的任何文件。

当我在 Visual Studio 中构建网站时,我可以看到它将大量其他 dll 复制到网站的 Bin 文件夹中。除了AjaxControlToolkit.dll...

所以我的问题很基本:ASP.NET WebForm 网站如何管理它们的引用?

【问题讨论】:

    标签: asp.net web


    【解决方案1】:

    Asp.Net 网站有一个文件夹 Bin。在此文件夹中放置所有引用,您只需将 dll 文件复制并粘贴到 Bin 文件夹中即可。

    【讨论】:

    • 感谢您的回复,但是当我在 Visual Studio 中构建网站时,它会将大量其他 dll 复制到 Bin 文件夹中,而不是 AjaxControlToolkit.dll。我已经更新了我的问题来说明这一点。
    • 您必须手动复制并粘贴此 dll 到 Bin 文件夹,如果您不使用 AjaxControlToolKit,请将其从您的 web.config 中删除
    • 但是,构建如何知道将其他 dll 复制到 Bin 文件夹中,而不是这个?
    • Build 不会复制文件,它只会构建 bin 文件夹中存在的 dll,如果在某处引用了丢失的 dll,则会引发错误。
    • 我不认为这是正确的 - 在我的机器上我可以看到,当我执行构建时,dll 被复制到 Bin 文件夹。
    【解决方案2】:

    我对系统的理解是 ASP.Net 以几种不同的方式处理引用:

    引用的项目通常存储在主目录中的“解决方案”文件中,如果您在记事本中编辑该文件,您应该会看到以下格式的引用:

    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ActiveDirectoryHelper", "..\..\DataAccess\ActiveDirectoryHelper\ActiveDirectoryHelper.csproj", "{D1DDF7A2-6F69-4400-92A7-FD7F4CD87FE8}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XXX.Library", "..\..\DataAccess\XXXLibrary\XXX.Library.csproj", "{F0A396FA-4588-41E8-B072-7121501689FA}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "..\..\DataAccess\Common\Common.csproj", "{F80C48D8-F6AD-43A2-8AB0-7E4A8461D372}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataAccess", "..\..\DataAccess\DataAccess\DataAccess.csproj", "{F9AEC8CE-6E04-4848-8168-1436EBA4E734}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataAccess.Tests", "..\..\DataAccess\DataAccessTests\DataAccess.Tests.csproj", "{472C68E1-66AA-486D-9B76-BC72254BB0F9}"
    

    第三方“DLL”,它们通过在“Bin”目录中包含“刷新”文件来存储。如果您使用任何类型的源代码控制,请不要忘记检查这些文件:

    (TFS 示例)

    如果您打开“刷新”文件,您将看到如下内容:

    Library\AjaxControlToolkit.dll
    

    NuGet 我认为要编译更多,请参阅details listed here,了解有关如何处理此问题的策略。

    标准和第三方库的,也在“web.config”文件中被提及,我假设它们是这样被引用的:

    <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="CustomMarshalers, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add assembly="Microsoft.VisualC, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    

    我从未见过有关这些的官方文档,所有这些都是我多年来与 TFS 或 Visual Studio 的斗争中得出的,我希望有一些官方写的东西可供人们参考。微软的官方文档倾向于glaze over 诸如此类的重要细节,当事情打破你的左玩侦探与未记录的低级实现细节......

    【讨论】:

      猜你喜欢
      • 2010-10-05
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 2017-05-18
      • 2010-09-10
      • 2010-10-18
      • 1970-01-01
      相关资源
      最近更新 更多