我已遵循 Jammer 的建议,并正在记录我认为的最小操作集,以获取适合用作 ASP.NET MVC4 类库项目的项目。这是在 Visual Studio 2012 Update 4 中完成的,目标是 VB.Net。如果有机会,我稍后可能会包含在 Visual Studio 2013 中执行类似操作的文档。以下是我采取的行动:
- 创建一个新的空白 MVC4 项目,其中包含一个单独的解决方案目录(这样您就可以清楚地看到包含更新版本的参考文件的
packages 目录是项目的一部分)。
- 添加一个虚拟控制器、视图和模型以对其进行测试(这需要在构建类库后将输出 DLL 和视图复制到另一个 Web 应用程序)。
- 从项目中删除以下文件:
- 整个
App_Start文件夹
- 整个
App_Data 文件夹和任何其他空文件夹(我的 Mercurial 历史记录并未显示此内容,因此我从记忆中删除)。
Global.asax
Global.asax.vb
- 根中的
Web.config 文件以及从属的Web.Debug.config 和Web.Release.config 文件。 (不要不要从 Views 文件夹中删除 Web.config。)
- 从 Views 文件夹中的
Web.config 文件中删除以下部分:
appSettings
system.web
system.webServer
- 您也可以删除行
<add namespace="System.Web.Mvc.Ajax" /> 和<add namespace="System.Web.Routing" />
- 从项目中删除以下引用(* 带星号的引用是特定于版本的引用,已进入
packages 目录,并将 Copy Local 和 Specific Version 设置为 True)。
System.Web.Entity
System.Web.ApplicationServices
System.ComponentModel.DataAnnotations
System.Data.DataSetExtensions
System.Web.Extensions
System.Web.Extensions.Design
System.Xml.Linq
System.Web.Abstractions
System.Web.Routing
System.Configuration
System.Web.Services
System.EnterpriseServices
-
Microsoft.Web.Infrastructure (1.0.0.0) *
-
Microsoft.Web.Mvc.FixedDisplayModes (1.0.0) *
-
Newtonsoft.Json (4.5.11) *
-
System.Net.Http (2.0.20710.0) *
-
System.Net.Http.Formatting (4.0.20710.0) *
-
System.Net.Http.WebRequest (2.0.20710.0) *
-
System.Web.Helpers (2.0.20710.0) *
-
System.Web.Http (4.0.20710.0) *
-
System.Web.Http.WebHost (4.0.20710.0) *
- 从项目设置中删除以下项目范围的导入:
System.Xml.Linq
System.Collections.Specialized
System.Configuration
System.Web.Caching
System.Web.Mvc.Ajax
System.Web.Routing
System.Web.SessionState
System.Web.Security
System.Web.Profile
System.Web.UI
System.Web.UI.WebControls
System.Web.UI.WebControls.WebParts
System.Web.UI.HtmlControls
- 从
packages.config 中删除以下内容:
- 从包文件夹中删除以下子目录:
- Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.0
- Microsoft.AspNet.WebApi.4.0.20710.0
- Microsoft.AspNet.WebApi.Client.4.0.20710.0
- Microsoft.AspNet.WebApi.Core.4.0.20710.0
- Microsoft.AspNet.WebApi.WebHost.4.0.20710.0
- Microsoft.Net.Http.2.0.20710.0
- Microsoft.Web.Infrastructure.1.0.0.0
- Newtonsoft.Json.4.5.11
这给我留下了以下内容:
- 一个针对 .NET Framework 4 的 VB.Net 类库项目(虽然我原本打算将其设为 4.5 - 我认为两者都可以)。
- 以下非默认 .NET 引用(带星号的引用必须将
Copy Local 和 Specific Version 设置为 True):
- System.Web
- packages\Microsoft.AspNet.Mvc.4.0.20710.0\lib\net40\System.Web.Mvc.dll *
- packages\Microsoft.AspNet.Razor.2.0.20715.0\lib\net40\System.Web.Razor.dll *
- packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.dll *
- packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Deployment.dll *
- packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll *
- 以下非默认导入:
- System.Web
- System.Web.Mvc
- System.Web.Mvc.Html
- 以下项目文件/结构:
-
Controllers 包含 CustomUIController.vb 的文件夹
-
Models 包含 CustomUIModel.vb 的文件夹
-
Views 文件夹包含CustomUI 文件夹,包含Index.vbhtml
-
Web.config Views 文件夹中的文件。内容见下文。
-
packages.config 项目根目录中的文件。内容见下文。
我的文件内容如下:
Web.config
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Html" />
</namespaces>
</pages>
</system.web.webPages.razor>
</configuration>
packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.AspNet.Mvc" version="4.0.20710.0" targetFramework="net40" />
<package id="Microsoft.AspNet.Razor" version="2.0.20715.0" targetFramework="net40" />
<package id="Microsoft.AspNet.WebPages" version="2.0.20710.0" targetFramework="net40" />
</packages>
CustomUIController.vb
Imports System.Web.Mvc
Public Class CustomUIController
Inherits Controller
Public Function Index() As ActionResult
Return View()
End Function
End Class
CustomUIModel.vb
Public Class CustomUIModel
Public Property Name As String
Public Property Value As Decimal
End Class
索引.vbhtml
@ModelType CustomTemplate.CustomUIModel
@Html.LabelFor(Function(m) m.Name)
此时,我可以使用 Intellisense 协助我处理 .vbhtml 视图和 .vb 类,构建项目,然后仅将视图复制到主应用程序部署的 Views 文件夹(在适当的子文件夹中)目录),并将项目的主输出 DLL 到主应用程序部署的 bin 目录(依赖的 DLL 文件已经存在)。
编辑:
在另一个系统上按照流程对其进行验证以及它在 .NET 4.5 和 VS 2013 上的工作方式之后,我注意到以下几点:
- 我想我忘了提到可以删除对
System.Web.DynamicData 的引用。
- 在 VS 2013 和/或 .NET 4.5 中,一些版本发生了变化:
- packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll
- packages\Microsoft.AspNet.Razor.2.0.30506.0\lib\net40\System.Web.Razor.dll
- packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.dll
- packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Deployment.dll
- packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Razor.dll
- 我不知道我是否在上面做了足够的强调,但是对私有(复制本地)DLL 的引用确实必须设置为复制本地和/或 do 从 MVC4 模板创建项目时,必须使用 packages 文件夹中提供的版本。我不知道为什么,但至少就 Intellisense 而言,.NET 标准版本(非私有)似乎不起作用。
- 就 IDE 而言,检查事情是否仍然“正常”的最佳方法是关闭解决方案,删除自定义项目输出中的
bin 和 obj 文件夹,重新加载解决方案,将将光标放在 Index.vbhtml 文件中的 LabelFor 上,然后按 F12 键查看它是否会将您带到对象浏览器。
因为新版本,packages文件不同:
Packages.config
<packages>
<package id="Microsoft.AspNet.Mvc" version="4.0.30506.0" targetFramework="net45" />
<package id="Microsoft.AspNet.Razor" version="2.0.30506.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebPages" version="2.0.30506.0" targetFramework="net45" />
</packages>