C# 为什么我的LocalCopy dll';不是从引用项目中的引用项目复制的?

C# 为什么我的LocalCopy dll';不是从引用项目中的引用项目复制的?,c#,vb.net,visual-studio,visual-studio-2013,C#,Vb.net,Visual Studio,Visual Studio 2013,我有以下情况: 解决 - Project 1: Web_Application (VB.NET Web Application) - Project 2: Code_Library (VB.NET DLL, Referenced in Project 1, References My_Reports, My_SQL) - Project 3: My_SQL (Embedded SQL scripts C# DLL, referenced in Code_Library) - Projec

我有以下情况:
解决

 - Project 1: Web_Application (VB.NET Web Application)
 - Project 2: Code_Library (VB.NET DLL, Referenced in Project 1, References My_Reports, My_SQL)
 - Project 3: My_SQL (Embedded SQL scripts C# DLL, referenced in Code_Library)
 - Project 4: MyReports (C# dll, depends on ReportViewer),  
              referenced in Code_library, copyLocal = true
              unfortunately depends on
                   - Microsoft.ReportViewer.WebForms.dll (copyLocal = true)
                     which depends on
                   - Microsoft.ReportViewer.Common.dll (copyLocal = true)
                   - Microsoft.ReportViewer.ProcessingObjectModel.dll (copyLocal = true)
                   - System.Web.DataVisualization.dll (copyLocal = true)
在MyReports项目中将ReportViewer dll设置为localcopy
在代码库中,MyReports设置为localcopy
在Web应用程序中,代码库和MyReports设置为localcopy

这会产生以下非常令人不满意的结果:
在MyReports中,ReportViewer dll被本地复制到输出目录
在代码库中,MyReports.dll位于输出目录中,但ReportViewer dll不在…
在Web_应用程序中,CodeLibrary.dll和MyReports.dll位于输出目录中,但ReportViewer dll不在

为什么?
我能做些什么吗(除了将reportViewer dll添加到我的Web应用程序项目?

我绝对不想将ReportViewer作为依赖项添加到代码库中,因为如果我想更改为更高版本的ReportViewer,我必须更新2个位置。

我有几个选项:

  • GAC您不想复制的参考资料
  • 在app.config文件-ala中引用它们
  • 添加后期生成事件以将文件复制到需要的位置

  • 您可以通过查看应用程序查找文件的位置。

    选项1不可能,因为我在客户的服务器上没有管理员权限。选项2非常不满意,因为有多个Web应用程序项目(针对不同的客户)使用代码库。具有固定路径的选项3将仅在我的计算机上工作。具有相对路径的选项3将仅在具有相同目录结构的计算机上工作。您可以潜在地将间接引用嵌入引用的项目中。ilMerge是一个好主意。打开的连接问题是GAC o中有问题的DLL部分n开发机器?如果是这样,删除它们可能会帮助visual studio认识到满足本地依赖关系的需要。@grek4:很可能它们在GAC中。我不能删除它们,我没有管理权限。其他开发人员也没有。我还安装了SQL server express&Management studio,所以我不能说这些程序集是否在GAC中安装了标准的.NET 2.0。此外,如果在.NET 4.0应用程序池上运行,.NET 2.0 dll可能不会出现在生产机器上。我可以理解,您不能篡改服务器,但如果您在自己的开发环境中没有管理员权限,因此无法将其调整到目标环境,则是你公司的一个组织问题,你真的应该把它提出来,而不是在这里找到解决办法。如果你指出浪费的时间(付费),也许你可以获得本地管理员权限时间。@grek40:是的,但是你向一只猫解释抓鸟不好比向我们的老板解释要幸运得多。相信我,我们都试过了。此外,他只是不想让任何人安装非法软件。我想这是一个合法的问题……此外,你几乎可以在没有管理员权限的情况下做任何事情。只是rt/停止服务和IIS管理(以及SSL证书),修改gac,在注册表中修改HKLM,这些都是不可能的。这确实很有趣。