C# 如何在我的项目中隐藏gif或mp3文件?

C# 如何在我的项目中隐藏gif或mp3文件?,c#,C#,我有一个C#项目,有一些gif和mp3文件 如何在项目中合并这些文件 (我不希望它们对用户可见)将它们包含在资源文件(resx)中。您应该将它们分配为资源。如果在VS中打开“属性”面板,请确保将生成操作设置为“资源”,并将“复制到输出目录”设置为“不复制”。您还可以从“资源”选项卡的“项目属性”中管理资源。将它们添加为嵌入式资源,它们将被编译到dll中 首先将它们添加到项目中,只需将它们拖动到解决方案资源管理器,然后转到它们的属性以将其生成操作更改为嵌入资源。您需要将它们作为资源包含在项目中,然

我有一个C#项目,有一些gif和mp3文件

如何在项目中合并这些文件


(我不希望它们对用户可见)

将它们包含在资源文件(resx)中。

您应该将它们分配为资源。如果在VS中打开“属性”面板,请确保将生成操作设置为“资源”,并将“复制到输出目录”设置为“不复制”。您还可以从“资源”选项卡的“项目属性”中管理资源。

将它们添加为嵌入式资源,它们将被编译到dll中


首先将它们添加到项目中,只需将它们拖动到解决方案资源管理器,然后转到它们的属性以将其生成操作更改为嵌入资源。

您需要将它们作为资源包含在项目中,然后通过读取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
使用System.Linq;//来自System.Core。否则,只需将linq转换为for each
使用System.IO;
公共流GetStream(字符串文件名){
//假设我们需要来自调用我们的同一个资源
var ass=Assembly.GetCallingAssembly();
var fullName=GetResourceName(文件名,ass);
//^^^应=MyCorp.FunnyApplication.Mp3Files.,或类似文件
返回ass.GetManifestResourceStream(全名);
}
//仅从文件名查找完全限定的资源名。这是
//因此,您不必担心任何名称空间问题/文件夹深度等。
公共静态字符串GetResourceName(字符串文件名,程序集ass){
var name=ass.GetManifestResourceNames()。其中(n=>n.EndsWith(fileName)).ToArray();
if(names.Count()>1)抛出新异常(“找到多个匹配项”);
返回名称[0];
}    
var mp3Stream=GetStream(“startup sound.mp3”);
var mp3=新的mymp3类(mp3stream);//使用流的某个与玩家相关的类
这里有一些链接可以帮助您开始

我使用了一个更完整的“ResourceHelper”。如果您喜欢,请告诉我(只需通过VB->c翻译程序传递)