Я хочу разделить макет (заголовки, навигация и нижние рамки) в нескольких проектах ASP.NET MVC. Как я могу это сделать?
Можно ли создать пакет NuGet для обертывания общих файлов Razor, изображений и CSS?
Я хочу разделить макет (заголовки, навигация и нижние рамки) в нескольких проектах ASP.NET MVC. Как я могу это сделать?
Можно ли создать пакет NuGet для обертывания общих файлов Razor, изображений и CSS?
Три подхода:
См. Скомпилируйте представления ASP.NET MVC Razor в отдельную DLL для того, как вы делаете вариант 2.
Для опции 3 см. Создание и публикация пакета.
На самом деле, я думаю, что это оригинальная статья о том, как скомпилировать представления Razor: Предварительно скомпилируйте представления MVC Razor с помощью RazorGenerator
Я ударил это более одного раза через Google сейчас, и хотя я бы поставил другое решение (которое, IMO, намного безопаснее и управляемо, чем использование прекомпиляторов и пакетов).
На самом деле, я бесстыдно читал дословный ответ от Эрика Филлипса, поэтому, пожалуйста, воздайте ему должное.
что он сказал... (он говорит это для файлов javascript, в частности, но это работает так же хорошо с любыми другими типами) исходный ответ
Вот что я бы рекомендовал:
Щелкните правой кнопкой мыши по решению и создайте новую папку решений с именем Common Javascript Files
(или все, что вы хотите называть.
Щелкните правой кнопкой мыши на Solution, выберите Open Folder в Проводнике Windows, или перейдите туда вручную для других версий Visual Studio: (
В каталоге решений создайте каталог с тем же именем, что и папка решения (папки решений обычно не совпадают с каталогами на уровне исходного кода, но это будет полезно для сани).
В этом новом каталоге добавьте файлы, которые необходимо разделить между решениями.
В Visual Studio выберите папку решений и выберите Добавить - Существующий элемент.
В диалоговом окне выбора файлов перейдите в каталог, созданный ранее, выберите файлы, добавленные в каталог, и нажмите "Добавить".
В каждом проекте, для которого требуется общий файл, щелкните правой кнопкой мыши проект (или каталог в проекте) и нажмите "Добавить - существующий элемент".
Перейдите в общий каталог, выберите файлы и щелкните стрелку раскрывающегося списка, затем нажмите "Добавить как ссылку".
Теперь файлы в проектах существенно сокращаются до файлов в папке Solution. Но они рассматриваются как фактические файлы в проекте (включая файлы .CS или Visual Basic, они будут скомпилированы как файлы, которые действительно существуют в проекте).
ПРОФИ
CONS
И - украсть у вас еще один ответ для консолидации информации, вот как вы их получите для вывода для отладки (взято из комментария ниже скребкового ответа, ссылка на сообщение блога для цели сборки для вывода для отладки)
Добавьте это в каждый проект проекта-потребителя .csproj
:
<Target Name="CopyLinkedContentFiles" BeforeTargets="Build">
<Copy SourceFiles="%(Content.Identity)"
DestinationFiles="%(Content.Link)"
SkipUnchangedFiles='true'
OverwriteReadOnlyFiles='true'
Condition="'%(Content.Link)' != ''" />
</Target>
Появились новые возможности (IMHO).
Я бы предпочел организовать его как Feature
сращивания в ASP MVC Core, это сэкономит много времени по дороге, я бы рекомендуем в 2 этапа.
Во-первых, организуем/помещаем в него область под названием Features
splices MSDN ref. подключите его как в статье и хорошо объясните.
// you're telling ASP that you've other Feature areas that it should look
public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context,
IEnumerable<string> viewLocations)
{
// Error checking removed for brevity
var controllerActionDescriptor =
context.ActionContext.ActionDescriptor as ControllerActionDescriptor;
string featureName = controllerActionDescriptor.Properties["feature"] as string;
foreach (var location in viewLocations)
{
yield return location.Replace("{3}", featureName);
}
}
Во-вторых, встроить Особенности в
Shared project
или Portable Libraries
. Я добавил ссылки на
как это сделать от Р. Уильямса и MSDN.
Итак, поскольку у вас уже есть это в общей области, рассмотрите его как функцию и встройте в портативный lib или общий проект. Хорошая статья Р. Уильямса.