无法在程序集中找到嵌入式架构

时间:2014-09-25 08:07:03

标签: c# xsd .net-assembly

我有DefaultSchemaSet.xsd。现在我收到以下代码的FileNotFoundException。请给我任何建议吗?我可以知道如何解决这个问题吗?

public static void GetDefaultSchemas(string path, XmlSchemaSet schemas, ValidationEventHandler schemaValidationEventHandler)
    {
        using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(path))
        {
            if (stream == null)
            {
                throw new FileNotFoundException("Cannot find the embedded schemas in the assembly!");
            }

            var schema = XmlSchema.Read(stream, schemaValidationEventHandler);
            schemas.Add(schema);
        }
    }

2 个答案:

答案 0 :(得分:0)

为了确保您可以从代码中访问它,您需要确保将文件的构建操作设置为"嵌入式资源"

为了进一步提供帮助,我们确实需要查看文件在解决方案中的位置(以便给出确切的答案),但同时确保您的参数" path"遵循这种模式:

[DefaultNamespace].[AnySubFolders].[filename.fileextension]

注意没有方括号

答案 1 :(得分:0)

检查资源名称的格式:

DefaultNamespace[.Subfolder][...MoreSubfolers].FileName[.extension]

您需要在项目的文件属性中将Build Action设置为Embedded Resource。

Embedded resource

此外,您需要检查用于项目的命名空间: enter image description here

尝试检查可用资源,以便查找是否存在特定资源:

        var executingAssembly = Assembly.GetExecutingAssembly();
        var resourceNames = executingAssembly.GetManifestResourceNames();
        foreach (var resourceName in resourceNames)
        {
            Console.WriteLine("Resource: " + resourceName);
            Console.WriteLine("Contents:");
            using (var sr = new StreamReader(executingAssembly.GetManifestResourceStream(resourceName)))
            {
                Console.WriteLine(sr.ReadToEnd());
            }
        }

输出:

Resource: EmbeddingTests.TextFile1.txt
Contents:
Hello
Resource: EmbeddingTests.NewFolder1.TextFile2.txt
Contents:
Hello 2