Я последовал предложению Джаммера и документирую, как мне кажется, минимальный набор действий для получения проекта, пригодного для использования в качестве проекта библиотеки классов ASP.NET MVC4. Это было сделано в Visual Studio 2012 Update 4 и предназначалось для VB.Net. Позже я могу включить документацию для выполнения чего-то подобного в Visual Studio 2013, если у меня будет возможность. Вот действия, которые я предпринял:
- Создайте новый пустой проект MVC4 с отдельным каталогом для решения (чтобы вы могли четко видеть, что каталог
packages
с обновленными версиями справочных файлов является частью проекта).
- Добавьте фиктивный контроллер, представление и модель для его тестирования (что повлекло за собой копирование выходной DLL и представление в другое веб-приложение после создания библиотеки классов).
- Удалить из проекта следующие файлы:
- Вся
App_Start
папка
- Вся папка
App_Data
и любые другие пустые папки (моя история Mercurial не делала это видимым, поэтому я ухожу из памяти).
Global.asax
Global.asax.vb
- Файл
Web.config
в корневом и зависимых файлах Web.Debug.config
и Web.Release.config
. (Не , а удалите Web.config
из папки Views.)
- Удалите следующие разделы из файла
Web.config
в папке Views:
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
Это оставляет мне следующее:
- Проект библиотеки классов VB.Net, нацеленный на .NET Framework 4 (хотя я предполагал, что это будет 4.5 - я думаю, что любой из них работает).
- Следующие нестандартные ссылки .NET (помеченные ссылки должны иметь
Copy Local
и Specific Version
установлены в True
): - System.Web
- пакеты \ Microsoft.AspNet.Mvc.4.0.20710.0 \ lib \ net40 \ System.Web.Mvc.dll *
- packages \ Microsoft.AspNet.WebPages.2.0.20710.0 \ Microsoft.AspNet.Razor.2.0.20715.0 \ lib \ net40 \ System.Web.Razor.dll *
- packages\ 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
Index.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, некоторые версии меняются:
- пакеты \ 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
- пакетов \ Microsoft.AspNet.WebPages.2.0.30506.0 \ lib \ net40 \ System.Web.WebPages.dll
- пакетов \ 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
- Я не знаю, изложил ли я это достаточно убедительно, но ссылки на частные (Copy Local) библиотеки DLL do должны быть установлены на Copy Local и / или * необходимо использовать версию, указанную в папке пакетов, при создании проекта из шаблона MVC4.Я не знаю почему, но стандартные версии .NET (не частные), кажется, не работают, поскольку Intellisense, по крайней мере, заинтересован.
- Лучший способ проверить, все ли по-прежнему "ОК«что касается среды IDE, это означает, что необходимо закрыть решение, удалить папки
bin
и obj
в выходных данных пользовательского проекта, повторно загрузить решение, навести курсор на LabelFor
в файле Index.vbhtml,и нажмите клавишу F12, чтобы проверить, не переходит ли он в обозреватель объектов.
Из-за новых версий файл пакетов отличается:
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>