Как скрыть gif или mp3 файлы в моем проекте? - PullRequest
4 голосов
/ 21 апреля 2009

У меня есть проект на C # с некоторыми gif и mp3 файлами

как мне объединить эти файлы в моем проекте?

(я не хочу, чтобы они были видны пользователям)

Ответы [ 4 ]

10 голосов
/ 21 апреля 2009

Вам необходимо включить их в проект в качестве ресурсов, а затем получить к ним доступ позже, прочитав из DLL.

Для файлов gif вы можете просто перетащить их на ресурсы (в диалоге проекта-> свойства), а затем получить к ним доступ через

var img = Properties.Resources.GifName;

Для mp3-файлов вам, вероятно, потребуется использовать встроенные ресурсы, а затем считывать их в виде потока. Для этого перетащите элемент в папку в своем проекте, предназначенную для файлов этого типа. Щелкните правой кнопкой мыши файл в проводнике, откройте панель свойств и установите для параметра «действие сборки» значение «встроенный ресурс».

Затем вы можете использовать код, похожий на этот (непроверенный перевод из vb, извините), чтобы вернуть вещь в виде потока. Вам решать превратить поток в то, с чем может справиться ваш игрок.

using System.Linq; // from System.Core.  otherwise just translate linq to for-each
using System.IO;

public Stream GetStream(string fileName) {
    // assume we want a resource from the same that called us
    var ass = Assembly.GetCallingAssembly();
    var fullName = GetResourceName(fileName, ass);
    //  ^^ should = MyCorp.FunnyApplication.Mp3Files.<filename>, or similar
    return ass.GetManifestResourceStream(fullName);
}

// looks up a fully qualified resource name from just the file name.  this is
// so you don't have to worry about any namespace issues/folder depth, etc.
public static string GetResourceName(string fileName, Assembly ass) {
    var names = ass.GetManifestResourceNames().Where(n => n.EndsWith(fileName)).ToArray();
    if (names.Count() > 1) throw new Exception("Multiple matches found.");
    return names[0];
}    

var mp3Stream = GetStream("startup-sound.mp3");

var mp3 = new MyMp3Class(mp3stream);  // some player-related class that uses the stream

Вот несколько ссылок, с которых можно начать

7 голосов
/ 21 апреля 2009

Добавьте их как встроенные ресурсы, и они будут скомпилированы в dll.

Сначала добавьте их в проект, просто перетащив их в обозреватель решений, а затем перейдите к их свойствам, чтобы изменить действие сборки для встроенных ресурсов.

4 голосов
/ 21 апреля 2009

Включить их в файл ресурсов (resx).

1 голос
/ 21 апреля 2009

Вы должны просто назначать их как ресурсы. Если вы открываете панель «Свойства» в VS, убедитесь, что для действия по сборке задано значение «Ресурс», а для параметра «Копировать в выходной каталог» - «Не копировать». Вы также можете управлять ресурсами из свойств проекта на вкладке ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...