代码之家  ›  专栏  ›  技术社区  ›  Konstantin

为什么ASP.NET网站在添加本地引用时引用GAC中的程序集?

  •  12
  • Konstantin  · 技术社区  · 15 年前

    为什么会有这样的行为?是否可以强制复制到bin文件夹(我需要它,因为.dll不在目标环境中)?我可以将程序集作为文件添加到bin文件夹中,它会工作,但在这种情况下,bin文件夹的内容将在源代码管理中,这是不好的。

    4 回复  |  直到 15 年前
        1
  •  13
  •   Don    15 年前

    可以将引用的“复制本地”属性设置为True。这会将其添加到Web应用程序项目上的bin文件夹中。

    c:\Windows\assembly\GAC\Accessibility\1.0.5000.0\uuu b03f5f7f11d50a3a\Accessibility.dll

    你说在源代码管理中包含bin文件夹内容是不好的。对于您构建的二进制文件,这通常被认为是正确的,但在您的情况下,您的二进制资产并没有作为项目的一部分进行编译。从理论上讲,它们相当于图像:二进制资产不是作为项目的一部分编译的。我认为它们和您的项目所依赖的任何其他二进制文件一样属于源代码管理。但这是个人的选择。

        2
  •  6
  •   LordHits    13 年前

    如果您在VisualStudio中使用一个网站项目,并且一个引用一直将其指向GAC版本,而不是其他文件夹(例如lib),则需要创建一个 xxxx.dll.refresh /bin文件夹中的文件,其中xxxx是您正在引用的有问题的dll。

        3
  •  4
  •   BALKANGraph    14 年前

    在运行时,程序集必须位于以下两个位置之一:项目的输出路径或全局程序集缓存(请参见使用程序集和全局程序集缓存)。如果项目包含对不在这些位置之一的对象的引用,则在生成项目时,必须将该引用复制到项目的输出路径。CopyLocal属性指示是否需要制作此副本。如果该值为true,则复制引用。如果为false,则不复制引用。

    CopyLocal的项目分配值按以下顺序确定:

    1. 如果引用是另一个项目,称为项目到项目引用,则该值为true。
    2. 如果在全局程序集缓存中找到该程序集,则该值为false。
    3. 作为特殊情况,mscorlib.dll引用的值为false。
    4. 如果在Framework SDK文件夹中找到程序集,则该值为false。 否则,该值为true。

    希望这有帮助

        4
  •  0
  •   Chris Halcrow    14 年前

    有关如何为web项目(不是web应用程序)设置引用的“复制本地”属性的信息,请参阅:

    http://msdn.microsoft.com/en-us/library/t1zz5y8c(v=VS.100).aspx