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

Posted

技术标签:

【中文标题】是否可以设置一个跨多个 ASP.NET MVC 项目使用的基础项目?【英文标题】:Is it possible to set up a base project for use across multiple ASP.NET MVC projects? 【发布时间】:2014-10-22 12:59:47 【问题描述】:

我的团队负责人把这个交给了我,我有点难过。我们刚刚开始在我们的商店中使用 ASP.NET MVC 进行 Web 开发,并且我们希望能够跨多个站点使用通用的设计和功能。

到目前为止,我已经研究过使用通用元素创建自定义模板,但缺点是模板的更新(据我所知)不会自动推送到使用该模板创建的项目中。由于需要自动更新使用项目的更改,因此自定义模板不适合我。

我的问题是,是否可以设置一个基础项目以跨多个 ASP.NET MVC 项目使用,其中对基础的更新传播到消费项目?如果你在这个领域有任何经验,我当然会很感激一些方向。如果这个问题对您来说似乎很简单,我深表歉意,但这是我第一次真正涉足 ASP.NET MVC。

【问题讨论】:

【参考方案1】:

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

设置一切非常简单。我在一天之内学会了如何创建 Nuget 包并建立一个私人仓库。以下是一些帮助您入门的资源:

    Official Nuget documentation for creating and deploying packages Using the Package Explorer application to create packages via a GUI Official Nuspec (the package manifest file) reference. Hosting your own Nuget feeds Alternate method for creating your own repository with SymbolSource integration

SymbolSource 还免费提供私人仓库,远程托管在他们的服务器上。一些企业环境可能不喜欢将他们的代码“放在云端”,但如果你能应付得来,这是迄今为止最简单的方法。

【讨论】:

【参考方案2】:

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

相反,我们选择记录应如何为特定设计设置项目,并由团队负责人了解他们正在进行的特定项目需要哪些位。

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

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

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

以上是关于是否可以设置一个跨多个 ASP.NET MVC 项目使用的基础项目?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 maproute 在 asp.net mvc 中路由多个参数

asp.net mvc 文件跨域上传,接收返回结果

Asp.net MVC:上传多个图像文件?

asp.net mvc,以 JSON 形式返回多个视图

ActionLink 与 ASP.NET MVC3 中的多个类

活动菜单项 - asp.net mvc3 母版页