2015-06-11 6 views
0

Установки: У меня есть библиотека классов .net 4.5, которая включает ресурсы (например, изображения) для повторного использования другими проектами ASP.NET MVC. Например, библиотека классов (с именем BlockTypesLibrary) имеет следующий путь:Как получить доступ к ресурсам в библиотеке классов .net из веб-запроса

  • BlockTypesLibrary (проект)
    • Статическая
      • IMG
        • Block.png

Я установил свойства Block.png для сборки Action == «Встроенный ресурс» и тип копирования в каталог вывода == «Не копировать».

Теперь в моем проекте MVC я ссылаться на BlockTypesLibrary.dll и я с помощью отражателя я вижу ресурсы, перечисленные в порядке:

  • BlockTypesLibrary
    • BlockTypesLibrary.dll
    • Ресурсы
      • BlockTypesLibrary. Static.img.Block.png

В шаблоне я попытался получить доступ к этому ресурсу разными способами, но не могу. Например:

<div > 
    <img src="~/BlockTypesLibrary.Static.img.Block.png" alt="Block"> 
    </div> 

Любые идеи, как сделать эту работу? Мне также нужно включить .cshtml шаблоны в качестве ресурсов в библиотеке классов.

+0

какая версия MVC вы используете? – Neverever

+0

Поскольку у меня нет жесткого образца, я не буду публиковать его в качестве ответа, но я думаю, вам нужно использовать класс ResourceManager, чтобы вытащить именованный ресурс (ваше изображение Block.png) из сборки как объект –

+0

@ Никогда не MVC 4 или MVC 5. – webteckie

ответ

4

Вам понадобится контроллер, который будет загружать изображение встроенного ресурса из другой сборки.

Библиотека проекта

public class ResourceLoader 
{ 
    public static byte[] Load(string file) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      // load resource 
      typeof(ResourceLoader).Assembly.GetManifestResourceStream(file).CopyTo(ms); 

      return ms.ToArray(); 
     } 
    } 

    public static string[] Files() 
    { 
     // return list of embeded resource available 
     return typeof(ResourceLoader).Assembly.GetManifestResourceNames(); 
    } 

} 

MVC проекта

public class ImgController : Controller 
{ 

    [Route("~/img/embed/{*filename}")] 
    public ActionResult Embed(string filename) 
    { 
     byte[] content = ResourceLoader.Load(filename); 
     string mime = MimeMapping.GetMimeMapping(filename); 

     return File(content, mime); 
    } 
} 

View.cshtml

<div > 
    <img src="/img/embed/BlockTypesLibrary.Static.img.Block.png" alt="Block"> 
</div> 
+0

Я поднял подсчет голосов, потому что это похоже на элегантное решение проблемы. Тем не менее, я пока не соглашусь с тем, что мне сложно выполнять это в моем решении. Но это связано с тем, что я использую среду CMS, которая переопределяет некоторые стандартные структуры MVC, поэтому мне нужно подходить к этому решению в рамках этого ограничения и до сих пор не повезло. Благодаря! – webteckie

Смежные вопросы