C# 类库-引用-可重用性与复制本地?

C# 类库-引用-可重用性与复制本地?,c#,.net,visual-studio,visual-studio-2010,C#,.net,Visual Studio,Visual Studio 2010,我有一个类库项目,我们称之为CoreLib。 CoreLib有两个对第三方DLL文件1.DLL和2.DLL的引用 因为我非常喜欢可重用性,所以我希望能够在尽可能多的地方/需要的地方使用CoreLib 因此,如果我有一个名为BigProjectA的项目和另一个名为BigProjectB的项目,他们需要利用CoreLib提供的功能,那么我所要做的就是在这些项目(BigProjectA和BigProjectB)中添加对CoreLib的引用 这很好,除非我将输出文件夹(bin目录)复制到另一个人的计算机

我有一个类库项目,我们称之为CoreLib。 CoreLib有两个对第三方DLL文件1.DLL和2.DLL的引用

因为我非常喜欢可重用性,所以我希望能够在尽可能多的地方/需要的地方使用CoreLib

因此,如果我有一个名为BigProjectA的项目和另一个名为BigProjectB的项目,他们需要利用CoreLib提供的功能,那么我所要做的就是在这些项目(BigProjectA和BigProjectB)中添加对CoreLib的引用

这很好,除非我将输出文件夹(bin目录)复制到另一个人的计算机上,否则我不能保证他们的计算机上有1.dll和2.dll

为此,我在CoreLib项目中将1.dll和2.dll引用的Copy Local设置为True

在构建CoreLib项目时,我可以看到1.dll、2.dll和CoreLib.dll文件。太完美了

但是在引用CoreLib的项目中,只复制CoreLib.dll,而不是1.dll和2.dll

我错过什么了吗?复制本地设置为True,但仅复制CoreLib项目的副本。因此,即使它们在同一个解决方案中,并且我正在添加CoreLib作为其他项目的项目引用,我仍然没有看到1.dll和2.dll复制到其他项目(BigProjectA和BigProjectB)的其他bin/Debug、bin/Release文件夹中


有简单的解决办法吗?

简单的解决办法是:

  • 在对CoreData.DLL有二进制引用的项目中,请参考1.DLL和2.DLL
  • 将CoreData添加为BigProjectA和BigProjectB的项目引用,而不是二进制引用

  • 在第一个场景中,编译器不会自动输出CoreData的依赖项。如果将CoreData项目添加到解决方案中,将输出其依赖项。因此,要将CoreData用作二进制引用,还必须引用它的依赖项。

    没有错。在项目
    BigProjectA
    BigProjectB
    中,您只引用了
    CoreLib
    ,因此他们“关心”的只是处理它,因为他们对它的依赖性没有任何线索。要解决这类问题,您可以在
    BigProject..
    中添加PostBuildVEent,以复制
    CoreLib
    依赖项

    或者添加对
    CoreLib
    project的引用,如果可以的话


    另一个解决方案是考虑DI像一种避免引用强耦合的技术。因此,如果在

    BigProjectA
    B
    中,您不关心第三方库在
    CoreLib
    中提供的功能,因为您只需复制
    CoreLib

    答案不错,伙计们……但实际上我只是使用了ILMerge。看起来更安全/不那么烦人


    不过谢谢你

    参考资料是CoreLib项目。这是一个项目参考。这正是我现在感到困惑的地方。我有一个类似的设置,在另一个解决方案中有不同的DLL文件,它工作得很好。VisualStudio是否可能先检查GAC中是否有它?…我会尽量避免像瘟疫这样的构建前/构建后事件。@Issa:不,我不这么认为。永远不要听这样的事情。@Issa:构建后事件没有什么不好的。如果你的项目不打算以惊人的速度扩展,以至于你需要每天重写它们,那么把它们写下来一次,然后忘掉它们。它们只是工作。在我的OP(注释)中添加了引用DLL。试一试guysMissed在问题中陈述了一个事实,即正在使用项目引用。我很抱歉…我不想做解决方案1,但那将是我最不愿意做的事情。解决方案2就是我所做的。它是一个项目引用,但文件仍没有被复制。GAC相关???您是在Visual Studio中编译,还是通过MSBuild编译?我在后者中遇到了一个辅助引用问题…Visual Studio 2010,只是尝试在IDE中构建并在Windows资源管理器中检查文件夹。非常基本的东西。目标Framework.NET 4.0在我的OP(注释)中添加了引用DLL。试一试这些参考是:Microsoft.SqlServer.ConnectionInfo.dll、Microsoft.SqlServer.Management.Sdk.Sfc.dll和Microsoft.SqlServer.Smo.dll您要合并哪些dll?CoreLib.dll+1.dll+2.dll?