Visual Studio复制DLL引用到输出文件夹

19

我正在尝试扩展某个应用程序。我正在使用一个捆绑在该应用程序中的DLL来扩展其功能。我正在使用Visual Studio 2010 Express版。我添加了一个对dll库的引用。在引用属性中,“复制本地”选项被禁用(灰色)。为什么会这样?我希望Visual Studio将dll文件复制到我的发布文件夹中。如果无法实现此操作,是否有其他方法来捆绑dll文件?

2个回答

28

你在对Hans的回答发表评论时提到了这是一个COM程序集,并且你正在使用Visual Studio 2010。

这意味着该程序集引用很可能已经设置了“嵌入互操作类型”选项。这将链接COM程序集到您的二进制文件中,从而无需部署它。以下链接具有更详细的解释

但是如果你想要部署它,那么需要按照以下步骤进行:

  • 单击“引用”选项卡中的引用
  • 按F4键,调出属性网格
  • 将“嵌入互操作类型”设置为False(这将使“复制本地”变为可编辑状态)
  • 将“复制本地”设置为true

3
这取决于DLL的类型。如果它是一个COM服务器,那么当你为该COM服务器注册了PIA时,复制本地将关闭。如果它是一个普通的.NET程序集,那么当它在GAC中注册时,复制本地将关闭。
通过使用regasm /u取消注册PIA或gacutil /u从GAC中删除来修复此问题。请注意,如果该DLL需要在目标计算机上执行其安装程序,则您可能不希望这样做。这很可能。与组件供应商或作者交谈以找出你应该怎么做。

这是一个COM程序集(我可以在Visual Studio添加引用对话框的COM选项卡中看到它)。我该如何找到需要提供给regasm的程序集路径?在Visual Studio中显示的路径为project\obj\x86\Release\Interop.lbname.dll。提供该路径确实可以成功执行,但我仍然遇到了同样的问题。 - user434541
很难理解这个。project\obj\x86\release不是交互操作组件的有效路径。在“添加引用”对话框中也不应该出现此路径。而且您不应该在本地 COM 服务器上使用 regasm.exe,只能在 .NET 中实现的 COM 服务器上使用。在这种情况下,您应该按原样使用它,而不是作为 COM 服务器使用。请与您的供应商联系。 - Hans Passant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接