是否可以设置一个跨多个ASP.NET MVC项目使用的基础项目

本文关键字:项目 MVC NET ASP 设置 是否 一个 | 更新日期: 2023-09-27 18:27:23

我的团队领导把这个交给了我,我有点不知所措。我们刚刚开始在我们的商店中使用ASP.NET MVC进行web开发,我们希望能够在多个网站上使用一些通用的设计和功能。

到目前为止,我已经考虑过创建一个具有公共元素的自定义模板,但其缺点是,对模板的更新(据我所知)不会自动推送到使用该模板创建的项目中。由于需要将更改自动更新到消费项目,所以自定义模板对我来说不起作用

我的问题是,是否可以设置一个跨多个ASP.NET MVC项目使用的基础项目,其中对基础的更新会被推荐给使用项目?如果你在这个领域有任何经验,我当然会感谢你的指导。如果这个问题在你看来很初级,我很抱歉,但这是我第一次真正涉足ASP.NET MVC。

是否可以设置一个跨多个ASP.NET MVC项目使用的基础项目

我发现在不同项目之间共享资源的最佳方法是创建自己的Nuget包。这些可以包含任何内容,从具有可重用类、枚举、扩展方法等的类库,到具有控制器、视图、JavaScript、CSS等的整个web应用程序。范围完全取决于您可以从项目中抽象出多少共性。然后,您可以建立自己的私人Nuget存储库来保存这些内容,这样您就不必将它们发布到整个世界。(尽管如此,如果你确实创造了一些对他人有利的东西,那么一定要在官方的Nuget回购上分享。)

设置一切都很琐碎。我学会了如何创建Nuget包并在一天内建立私人回购。这里有一些资源可以让你开始:

  1. 用于创建和部署包的官方Nuget文档
  2. 使用包资源管理器应用程序通过GUI创建包
  3. 官方Nuspec(包清单文件)参考
  4. 托管您自己的Nuget订阅源
  5. 使用SymbolSource集成创建自己的存储库的替代方法

SymbolSource还免费提供私人转发,远程托管在他们的服务器上。有些企业环境可能不喜欢将代码"放在云中",但如果你能做到这一点,这是迄今为止最简单的方法。

根据经验,我工作的公司发现,虽然我们的项目中有常见的设计和功能元素,但不常见的元素可能过于广泛,超过了需要某种形式的基础项目。使用自定义项目模板也会成为一场维护噩梦,因此请避免使用这些模板。

相反,我们选择了记录项目应该如何针对特定设计进行设置,并由团队负责人来跟踪他们正在进行的特定项目需要哪些部分。

如果有功能重叠,我们已经考虑过(但实际上还没有完成)创建一个具有自己开发生命周期的公共库,然后设置我们自己的NuGet Server,将公共库分发给您的其他项目。我们还没有做到这一点,主要是因为我们所做的项目之间的差异往往足够大,因此没有必要这样做。

但从你所描述的声音来看,NuGet包或类似的东西可能是你的情况。

虽然我不认为有一种方法可以建立一个其他所有东西都继承的基础项目,但你可以很容易地建立一个所有其他东西都引用的公共库项目。它可以包括您将要使用的所有常见事物的基类(例如ControllerBase)。

这样,更新库项目将允许向所有其他项目添加新功能。您可以配置模板,以便在添加新元素时默认使用公共基类。

根据引用公共库(编译的dll/链接的项目引用)的方式,您可以获得到特定版本的稳定链接,也可以在所有项目中即时更新。我个人更喜欢引用公共dll而不是项目,因为这允许project A使用比project B旧的版本。将A更新到新版本很简单,但它为您提供了一定程度的分离,这样,如果B需要中断更改,您就不必浪费资源来保持A的工作。

另一个额外的好处是,从源代码管理中签出旧版本仍然可以保证工作,因为它将与创建时使用的库的版本绑定。