C# 类库-引用-可重用性与复制本地?
我有一个类库项目,我们称之为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文件夹中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目录)复制到另一个人的计算机
有简单的解决办法吗?简单的解决办法是:
在第一个场景中,编译器不会自动输出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?