【问题标题】:Does adding an assembly reference have any side effects?添加程序集引用是否有任何副作用?
【发布时间】:2012-07-10 20:22:06
【问题描述】:

我目前正在调查一个奇怪的错误,即仅在项目中添加某个程序集引用似乎会在运行时破坏另一个程序集的某些功能。详情请见another question on SO

添加程序集引用时会发生什么?它会产生什么样的副作用?

【问题讨论】:

  • 它是在运行时还是编译时中断?第一个直接影响是命名空间范围——该程序集的命名空间和公共项在代码中变得可见。也许存在命名冲突。在编译时会很明显,但如果涉及反射,在运行时可能不太明显?
  • 如果是运行时,可能是引用的程序集的依赖丢失了。
  • @Sebastian 错误是什么?有示例代码吗?
  • @AdamHouldsworth:有关精确错误,请参阅我链接到的另一个问题。在这个问题中,我更感兴趣的是了解添加参考时发生的情况,而不是解决原始问题。还有另一个问题。

标签: c# visual-studio-2010 assemblies


【解决方案1】:

全局程序集缓存

您不能从全局程序集缓存添加引用,因为它是运行时环境的一部分。


自定义组件

如果您部署或复制的应用程序包含对在全局程序集缓存中注册的自定义组件的引用,则无论“复制本地”设置如何,该组件都不会随应用程序一起部署或复制。


另一个项目的输出

您应该避免在同一解决方案中添加对另一个项目的输出的文件引用,因为这样做可能会导致编译错误。相反,使用“添加引用”对话框的“项目”选项卡来创建项目到项目的引用。


注册的 COM DLL

如果要添加对包含内部清单的已注册 COM DLL 的引用,请确保先取消注册 DLL。如果不这样做,Visual Studio 会将程序集引用添加为 ActiveX 组件,而不是作为本机 DLL。


EnvDTE 命名空间

当您手动添加对任何 EnvDTE 命名空间(EnvDTE、EnvDTE80、EnvDTE90、EnvDTE90a 或 EnvDTE100)的引用时,请在“属性”窗口中将引用的嵌入互操作类型属性设置为 False。将此属性设置为 True 可能会导致构建问题,因为某些 EnvDTE 属性无法嵌入。


参考:MSDN - How to: Add or Remove References in Visual Studio

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多