【问题标题】:Why are some references missed when running my application?为什么在运行我的应用程序时会丢失一些引用?
【发布时间】:2010-07-27 08:36:21
【问题描述】:

我有以下使用领域模型、StructureMap 和 Fluent NHibernate 的项目结构:

我遇到的问题是 Fluent NHibernate 需要以下所有内容作为网站的 bin 目录才能在运行时工作:

  • Antlr3.Runtime.dll *
  • Castle.Core.dll
  • Castle.DynamicProxy2.dll
  • FluentNHibernate.dll *
  • Iesi.Collections.dll *
  • log4net.dll *
  • NHibernate.ByteCode.Castle.dll
  • NHibernate.dll *

我遇到的问题是,并非所有这些程序集都输出到我网站的 bin 目录。目前只有带有* 的项目才能正确输出。 粗体中的项目在 bin 目录中丢失。

现在,我认为这是因为我没有将它们添加为我的Fluent NHibernate 项目的引用。我目前拥有的唯一参考资料是 NHibernate.dllFluentNHibernate.dll。仅这两个引用就足以将标有* 的项目带入,但它们不会带入缺少的项目。

所以,然后我认为要让它们全部通过,我只需将它们添加为对Fluent NHibernate 项目的引用。不幸的是,这没有任何区别。 bin 目录中仍然缺少相同的项目。

我从来没有真正理解视觉工作室如何决定复制哪些程序集。我一直认为它是任何标记为 Copy Local=true 的程序集,但在这种情况下似乎并非如此。

当然,我可以将所有程序集引用添加到 Website,但这样就完全解决了通过 StructureMap 松散耦合项目的目的。

有谁知道为什么缺少程序集以及如何让它们正确复制?

【问题讨论】:

    标签: visual-studio nhibernate visual-studio-2010 fluent-nhibernate structuremap


    【解决方案1】:

    您可以添加对要求这些文件存在于输出目录(在您的情况下为网站)中的项目的引用,也可以在构建脚本中添加构建后步骤以复制它们。

    这是 VS 的一个例子,编译器“聪明”地知道是否真的需要引用。 C# 编译器优化了那些实际上不需要的引用。在 VS 中添加对非必需程序集的引用将确保它出现在该项目的输出目录中。但是,依赖项目只有在引用它的项目实际使用它时才会获得相同的程序集。也就是说,如果 C# 编译器没有优化它的引用。这就是为什么你需要添加对网站项目的引用,如果你走那条路。

    就我个人而言,我就是这么做的。我真的不认为这是紧密耦合,因为 NH 仍然在运行时动态解析程序集。这并不是说我不能手动替换其他字节码程序集并重新启动我的应用程序。但如果没有足够的测试,我也不会这样做,所以在某种程度上我认为自己在此基础上与 Castle 耦合。因此,我对这些参考资料并不感到厌烦。

    【讨论】:

    • 出于兴趣,既然可以使用构建后事件和复制,为什么还要添加引用?
    • 我会在构建后的步骤中复制它们,并保持 Web 项目不受引用的影响。
    • @jishi:每个人都有自己的。对我来说,网站项目中的后期构建步骤与添加引用一样多是一种依赖声明。
    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    相关资源
    最近更新 更多