如何创建自定义 ASP.NET MVC 项目模板?

How can I create a custom ASP.NET MVC project template?

背景: 我正在尝试 create a new C# project 使用 Visual Studio 2013 Ultimate Update 5 的 ASP.NET MVC 模板。首先,我创建从空模板创建 Web 应用程序并包含 MVC 引用。然后,我添加应用程序所需的所有基本组件,例如模型、控制器和视图。接下来,我 运行 它,它起作用了。然后,我将其导出为项目模板。

过去,我已经使用上述方法成功创建了 Web Api 和控制台应用程序的模板。

问题描述:当我尝试将模板用于新项目时,出现以下错误:

根据错误消息和 Microsoft,我应该能够通过将以下代码放入我的 Web.config 文件中来解决此问题:

  <system.web>
    <compilation debug="true" targetFramework="4.5.1"/>
    <httpRuntime targetFramework="4.5.1"/>
  </system.web>

但是,这已经存在,并且对话框仍然存在。

如果我在不调试的情况下尝试 运行,我会在浏览器中收到以下错误:

HTTP Error 500.19 - Internal Server Error

The requested page cannot be accessed because the related configuration data for the page is invalid.

尝试解决:

  1. 已删除 Web.config 和 web.config 文件并导入 他们来自现有的有效解决方案。
  2. 已选择"Add a new Web.config file with debugging enabled," 这将覆盖现有的 Web.config 和 web.config 文件。 尽管 Visual Studio 能够覆盖 Web.config,但它失败了 overwrite web.config ("操作无法完成。不是 已实施”出现在对话框中)。
  3. 将上面的 system.web 标签添加到 web.config。
  4. 确保 Asp.Net 调试器在 属性 中启用 设置
  5. 在 运行ning
  6. 之前清理并手动删除了现有的 .dll
  7. 卸载并重新安装ASP.NET带 Nuget 的 MVC

更新:

我没有在 Visual Studio 中使用导出模板,而是安装了 TemplateBuilder and SideWaffle 并按照链接的视频说明构建自定义项目模板。但是,在尝试从模板创建新项目时出现以下错误:

这个错误自 4 月以来一直 open issue within github,看来我运气不好。

第二次更新:根本原因分析

我已经确定了基于导出模板的项目失败的根本原因。比较基础项目和派生项目的引用揭示了以下内容:

派生:

<Reference Include="System.Web.Razor">
  <HintPath>..\..\..\..\..\..\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v2.0\Assemblies\System.Web.Razor.dll</HintPath>
</Reference>

基地:

<Reference Include="System.Web.Razor">
  <HintPath>..\packages\Microsoft.AspNet.Razor.3.2.3\lib\net45\System.Web.Razor.dll</HintPath>
</Reference>

将派生项目中的 HintPaths 重置为基础项目中的 HintPaths 后,派生项目 运行 成功(无 "Debugging Not Enabled" 对话框)。

问题变为:"How can I ensure the HintPaths of the derived project are set to the appropriate values automatically?"

我能够使用以下方法创建一个有效的 MVC 模板:

在基础项目中:

在csproj文件中,引用MVC相关dll的形式如下:

<Reference Include="System.Web.Razor">
  <HintPath>\BILL\Users\Popper\Desktop\Whosebug\UNCPathNonSpecificPrivateReferences\packages\Microsoft.AspNet.Razor.3.2.3\lib\net45\System.Web.Razor.dll</HintPath>
  <SpecificVersion>False</SpecificVersion>
  <Private>True</Private>
</Reference>

特别是,dll 的 UNC 路径可防止 HintPath 被覆盖。

在派生项目中:

保存并构建后,我关闭并重新打开项目。