我认为这可能是一个已被问过很多次的问题,但我找不到它。
我们正在开发应用程序并拥有多个目标使用的多个共享程序集。当我创建一个新的应用程序时,我可能会使用这样的程序集(例如Framework)并在我的项目中引用它。一切都很好。但是,当此Framework程序集使用例如Model程序集时,我不会强迫Visual Studio引用它。只要我的代码没有触及任何模型类型,它就会在没有引用的情况下编译好。
在运行时,它确实需要Model程序集。当发布此应用程序时没有问题,因为我只是在我的安装程序项目中包含所有必需的引用。
当我尝试调试应用程序时,问题就出现了。 bin文件夹没有Model程序集,因为它没有被引用。
问题
是否有最佳实践来解决这种“参考参考”情况?
我们提出的解决方案
添加模型作为参考
这感觉不对,我们污染了项目
在解决方案中包含Model项目并添加为项目参考
这感觉更糟(污染解决方案)
添加构建后步骤
可能是一个解决方案,但也感觉不对。
答案 0 :(得分:1)
最佳解决方案是将Framework
或Library
程序集(或集合)与NuGet打包在一起。然后,您可以在Visual Studio中使用NuGet来处理所有这些引用。即使使用嵌套依赖项,这也很有用。
完全支持NuGet并将其集成到Visual Studio中。托管您自己的软件包存储库非常容易(可以像指向包中的文件共享一样简单)。
您可以为自己的(内部)pacakges托管一个私人的现场存储库。这就是大多数商店所做的。您可以将它与一个或多个公共NuGet存储库结合使用,作为Log4Net等公共事物。
虽然看起来需要一些时间才能启动并运行(这是相对的,尝试首先使用公共包只是为了让人们首先使用NuGet),你可以获得很多好处,好。例如,您可以立即获得对库的版本控制的支持。
在我的公司,我们多年来一直遇到这个问题,我们过去常常将库组件(50+)构建和签入到源代码控制中,然后在分支机构中拖动它们。由于我们已经改变了使用NuGet的方法,这个问题对我们来说已经消失了。再也不回头了。
答案 1 :(得分:0)
对另一个项目的引用不一定需要是Project引用。在您的示例中,将Model引用为Framework中的Bin引用。这样,预构建的模型将包含在Framework的构建中。