除非在代码中引用,否则通过Add Reference添加的程序集不会复制到输出目录

Kie*_*one 13 .net msbuild dependency-injection ninject visual-studio-2010

情况:

  • 项目1是解决方案中的组件
  • 项目2是同一解决方案中的可执行程序集项目
  • 项目2具有项目参考(通过添加参考)到项目1
  • 项目2不直接引用代码中项目1中的名称空间/类型
  • 项目2使用Ninject动态加载项目1并使用其中的实现类

问题:

  • 即使Copy Local设置为True作为引用,并且引用的程序集在GAC中不存在,引用的程序集也不会复制到输出构建目录
  • Ninject随后找不到程序集,因此绑定/解析失败

这个过程适用于相同的设置,其中引用的程序集中的某些类被直接引用,并且由Ninject加载,所以我认为原因如下:如果VS检测到引用的程序集中的类型没有在代码中引用,它不会复制引用的程序集,即使它被添加为Copy Local = True的引用.

解决方案(S):

  • 找一种告诉VS的方法,"复制本地(我真的是说它)"=真 - 这将是我理想的解决方案.
  • 向引用的程序集添加文件引用.不好,因为我失去了项目参考的优点(可能或可能不完全在我脑海中).
  • 在代码中以某种"令牌"方式引用程序集.凌乱 - 我想使用References列表来维护我想要包含的程序集/模块列表.
  • 构建后步骤以复制程序集.凌乱,不理想.

任何人都可以帮助第一个解决方案,或建议另一个?

Lud*_*dwo 7

如果部署/复制包含对GAC中注册的自定义组件的引用的应用程序,则无论"复制本地"设置如何,都不会使用该应用程序部署/复制该组件.请参阅MSDN

您必须通过将专用元数据添加到GAC程序集引用来强制将local local复制到true .编辑项目文件并添加私有元数据:

<Reference ..>
    <Private>True</Private>
</Reference ..>

<ProjectReference ..>
    <Private>True</Private>
</ProjectReference ..>
Run Code Online (Sandbox Code Playgroud)

现在应该从输出文件夹中复制/删除您的GAC程序集.


Kie*_*one 5

Aha ..引用的程序集针对.NET Framework 4.0,但引用程序集的目标是.NET 4.0的Client Profile版本.

引用已添加,出现,没有任何问题或警告(至少从UI或VS),但我无法在代码中引用它,并且它不会出现在输出中.

如果有人有想法为什么这个未被发现,也许他们可以让我知道?