我的团队领导将这一个交给我,我有点难过。我们刚刚开始在我们的商店中使用ASP.NET MVC进行Web开发,并且我们希望能够在多个站点中使用通用设计和功能。
到目前为止,我已经研究了使用公共元素创建自定义模板,但缺点是模板的更新(据我所知)不会自动推送到使用该模板创建的项目。由于更改自动更新到消费项目是一项要求,自定义模板不会对我有用。
我的问题是,是否可以设置一个基础项目,以便在多个ASP.NET MVC项目中使用,其中基础的更新会传播到消费项目?如果你有这方面的经验,我当然会欣赏一些方向。如果这个问题看起来很简单,我很抱歉,但这是我第一次真正涉足ASP.NET MVC。
答案 0 :(得分:4)
我发现在不同项目之间共享资源的最佳方法是创建自己的Nuget包。这些可以包含从具有可重用类,枚举,扩展方法等的类库到包含控制器,视图,JavaScript,CSS等的整个Web应用程序。范围完全取决于您可以从项目中抽象出多少通用性。然后,您可以设置自己的私有Nuget存储库来保存这些存储库,这样您就不必将它们发布到整个世界。 (虽然,如果你确实创造了一些对他人有益的东西,一定要分享官方的Nuget回购。)
设置一切非常简单。我学会了如何创建Nuget包并在一天内设置私人仓库。这里有一些资源可以帮助您入门:
SymbolSource还提供私人回购,远程托管在他们的服务器上,免费提供。某些企业环境可能不喜欢在云中使用他们的代码,但是如果你可以使用它,这是迄今为止最简单的方法。
答案 1 :(得分:0)
根据经验,我工作的公司发现虽然我们的项目中有共同的设计和功能元素,但是不常见的元素可能过于宽泛,因此需要具有某种形式的基础项目。使用自定义项目模板也会成为维护的噩梦,因此请避免使用。
相反,我们选择记录如何为特定设计设置项目,并由团队负责人跟踪他们正在处理的特定项目需要哪些位。
如果存在功能重叠,我们已经考虑过(但实际上还没有完成)创建一个具有自己开发生命周期的公共库,然后设置我们自己的NuGet Server来分发公共库到你的其他项目。我们还没有做到这一点,主要是因为我们工作的项目之间的差异往往足够大,因为这是不合理的。
但是从您所描述的内容来看,NuGet包或类似的内容可能是您的理想选择。
答案 2 :(得分:0)
虽然我认为没有办法设置其他所有内容继承的基础项目,但您可以很容易地设置一个所有其他人都参考的公共库项目。它可以包括您将要使用的所有常见事物的基类(例如ControllerBase
)。
这样,更新库项目将允许将新功能添加到所有其他项目。您可以配置模板,以便在添加新元素时默认使用公共基类。
根据您引用公共库(已编译的dll /链接项目引用)的方式,您可以获得指向特定版本的稳定链接或所有项目的即时更新。我个人更喜欢引用常见的dll而不是项目,因为这允许project A
使用比project B
更旧的版本。将A更新到新版本是微不足道的,但它会为您提供一定程度的分离,以便在B
需要更改时,您不必浪费资源来保持A
正常工作。
另一个额外的好处是,从源代码控制中检出旧版本仍然可以保证工作,因为它与创建时使用的库版本相关联。