0

我正在创建用于工作的MVC starterkit,并且在创建多项目模板时无法进行大量手动修改。Visual Studio 2012具有相互依赖关系的多个项目模板

我有什么是对彼此一些依赖4个项目:

  • StarterKit.Common - 不依赖
  • StarterKit.DAL - 依赖于StarterKit.Common
  • StarterKit.BL - 依赖到StarterKit.Common和StarterKit.DAL StarterKit.Web - 依赖于其他三个

我试着去每个出口的工程中的路线t使用导出模板向导,创建一个根.vstemplate文件并将其全部压缩。虽然这有效(我可以基于这个模板创建一个新的解决方案),但它有一些严重的问题。

首先,出口取代了每个项目的整个命名空间$ safeprojectname $,即StarterKit.DAL => $ safeprojectname $,StarterKit.Web => $ safeprojectname $等

这意味着,当新项目被创建(我们称之为XXX),以前在名称空间中的内容StarterKit.Web现在在XXX名称空间中结束,之前的StarterKit.BL 也是最终在XXX名称空间中!

这显然不起作用。其次,一些使用语句根本不被替换。例如using StarterKit.Common;在Web项目中未被替换,因为它没有正确的名称空间(即StarterKit.Web)。

第三,我有一些.tt脚本包含使用我想要替换的语句,但即使我在项目中设置了ReplaceParameters="true",这些脚本根本没有触及。

我也研究过创建一个VSIX项目,但坦率地说,我不明白我该如何使用它。对我来说,它看起来很像一个zip工具,为你创建.vstemplate并将.zip重命名为.vsix。

我需要做的是:

  • 包所有在一个单一的部署文件可用的项目在VS
  • 当创建一个newproject一个“新建项目”模板,全部替换“入门套件” .csproj,.cs,.cshtml和.tt文件中的名称空间引用与用户选择的任何解决方案名称
  • 找出一个简单的过程,只要基础项目发生更改,我就可以轻松更新模板(添加/删除文件,改名,内容改变等)

有没有人有任何想法,如果这甚至可能?

回答

2

充分披露:我下面提到的项目的创造者。

您可以使用我创建的名为GlobalParamsIWizard实现来实现所需的结果。它使解决方案模板级别的信息对于也运行向导的子模板可用,方法是将全部解决方案级别参数与单词全局相加,并将它们添加到子模板的参数中。

如果使用globalParams中与以上多项目模板,用户输入 “入门套件”,以下将是真实的:

  • StarterKit.Common可以访问
    • $ safeprojectname $ = StarterKit.Common
    • $ globalsafeprojectname $ =入门套件
    • $ globalguid1 $ = E8C8A064601844439909D6C33AB90CB3
    • $ globalguid2 $ = 020DB5ABF76040C7BDA19EAC54DFE3D8
    • $ globalguid3 $ = 8392FB760F754C0AB87778845CC28B6D
    • $ globalguid4 $ = 13E07D43F523467587296B2C386DEE50
  • StarterKit.DAL
    • $ safeprojectname $ = StarterKit.DAL
    • $ globalsafeprojectname $ = StarterKit
    • $ globalguid1 $ = E8C8A064601844439909D6C33AB90CB3
    • $ globalguid2 $ = 020DB5ABF76040C7BDA19EAC54DFE3D8
    • $ globalguid3 $ = 8392FB760F754C0AB87778845CC28B6D
    • $ globalguid4 $ = 13E07D43F523467587296B2C386DEE50
  • StarterKit.BL
    • $ safeprojectname $ = StarterKit.BL
    • $ globalsafeprojectname $ = StarterKit
    • $ globalguid1 $ = E8C8A064601844439909D6C33AB90CB3
    • $ globalguid2 $ = 020DB5ABF76040C7BDA19EAC54DFE3D8
    • $ globalguid3 $ = 8392FB760F754C0AB87778845CC28B6D
    • $ globalguid4 $ = 13E07D43F523467587296B2C386DEE50
  • StarterKit.Web
    • $ safeprojectname $ =入门套件。网络
    • $ globalsafeprojectname $ =入门套件
    • $ globalguid1 $ = E8C8A064601844439909D6C33AB90CB3
    • $ globalguid2 $ = 020DB5ABF76040C7BDA19EAC54DFE3D8
    • $ globalguid3 $ = 8392FB760F754C0AB87778845CC28B6D
    • $ globalguid4 $ = 13E07D43F523467587296B2C386DEE50

通过GlobalParams您可以访问100 Guid秒,全球前缀在子模板中相同。所以StarterKit.Common项目可以作为项目ID的 “$ globalguid1 $” 的值与StarterKit.DALStarterKit.BL建设项目引用使用StarterKit.Common“$ globalsafeprojectname $来。 Common“作为被引用项目的名称,”$ globalguid1 $“作为被引用项目的ID。我想你可以看到它将如何工作来建立其他项目之间的参考。

+0

非常好的解决方案。尽管这次我不打算使用它(PS脚本适用于我们的目的),但我会将其标记为答案,因为它可能是解决原始问题的唯一方法。 – peter3

0

我从来没有找到答案,所以我选择了另一条路线。

我已经创建了一个PowerShell脚本,包含在解压缩文件的zip文件中。该脚本根据用户选择的项目名称重命名解决方案,项目和类。

的令人失望的是,这必须的Visual Studio之外运行

相关问题