繁体   English   中英

如果不存在,则在 C# 类库中创建嵌入资源

[英]Creating embedded resource in C# class library if it doesn't exist

我有一个类库的问题; 我正在准备一个带有代表特定数据存储签名的接口的库。 目的是使用该接口作为实现许多特定类的基础,这些类以不同的格式(文本文件、xml 文件等)存储配置信息,同时为使用它的应用程序保留相同的使用配置文件。 不过我有问题。 在这种情况下,我试图将 xml 文件作为资源嵌入 - 该文件是一种存储配置数据的格式。 该文件作为嵌入资源位于项目的子文件夹中,如附图所示。

在此处输入图片说明

在下面的代码片段中,显示了到目前为止我是如何实现该功能的。

public ConfigInfoXmlSource()
{
    if (!string.IsNullOrEmpty(Settings.Default.CurrentConfigFile))
        FileNameAndPath = Settings.Default.CurrentConfigFile;
    else
        FileNameAndPath = DefaultConfigFileName + DefaultFileExtension;

    // Prepare XML.
    System.Reflection.Assembly a = Assembly.GetExecutingAssembly();
    XmlDocument doc = new XmlDocument();
    Stream manifestResourceStream = 
        a.GetManifestResourceStream("TestTool.Config.Config1.xml");

    if (manifestResourceStream == null)
    {
        // ???
    }
    ...

    doc.Load(manifestResourceStream);

    ...     
}

在标记为“准备 XML”的部分中,我试图从嵌入的资源中读取流。 读取后,测试是否确实创建了流。 如果找到该文件, manifestResourceStream 将包含 xml 数据 - 到目前为止一切顺利。 如果文件由于某种原因被意外删除,问题就会出现 - 在这种情况下,我想创建一个新文件作为嵌入资源来替换已删除的文件。 这应该发生在显示为“???”的部分的条件中。

我已经尝试了我能想到的一切,在谷歌上搜索答案等 - 无济于事。

有没有人知道这是如何完成的? 任何帮助将不胜感激。

提前致谢。

此致。

如果你有一个嵌入的资源,它被内置到你的二进制文件中。它不是一个物理文件,而是存在于构建文件中的东西(在这种情况下为 dll)。所以,一旦包含它,我认为它不能永远被删除。 据我所知,嵌入式资源只能在构建项目二进制文件时设置,并且由于上述原因,您不能在运行时明确设置它,因为它不需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM