Подобная техника в .NET (я не решаюсь сказать «эквивалент», потому что я не знаю достаточно хорошо, чтобы быть уверенным в Java) - это использовать встроенные ресурсы.Установите действие сборки для файлов .cshtml на встроенный ресурс и используйте Assembly.GetManifestResourceStream
, чтобы открыть поток с содержимым ресурса.
string resourceName = typeof(Program).FullName + ".Views.Index.cshtml";
using (Stream resourceStream = typeof(Program).Assembly.GetManifestResourceStream(resourceName))
{
// Read the contents
}
Предполагается, что пространство имен класса Program является пространством имен по умолчанию для сборки.Обычно это будет так, но если вы переименовали вещи с момента создания проекта, это может быть не синхронизировано, так что следите за этим.Кроме того, поток будет null
, если ресурс не может быть найден, поэтому убедитесь, что вы также проверите это.
Вы также можете использовать Assembly.GetManifestResourceNames
для перечисления шаблонов.
string prefix = typeof(Program).FullName + ".Views.";
var templates = (from rn in typeof(Program).Assembly.GetManifestResourceNames()
where rn.EndsWith(".cshtml")
select new TemplateInfo
{
Key = Path.GetFileName(rn)
FileName = rn.Substring(prefix.Length)
ResourceName = rn
}).ToList();
Теперь у вас есть список объектов (вы сами определяете TemplateInfo
) с именем ресурса, именем файла и ключом, который вы можете использовать в менеджере шаблонов.
У этого метода есть один недостаток:Когда вы добавляете новые файлы CSHTML, вы должны помнить, чтобы изменить его на Embedded Resource.Совет: если вы скопируете / вставите файл в Visual Studio, он скопирует свойство Build Action в новый файл.