C# 在程序集中找不到嵌入的架构

C# 在程序集中找不到嵌入的架构,c#,xsd,.net-assembly,C#,Xsd,.net Assembly,我有DefaultSchemaSet.xsd。现在我得到下面代码的FileNotFoundException。请给我一些建议好吗?我能知道怎么解决这个问题吗 public static void GetDefaultSchemas(string path, XmlSchemaSet schemas, ValidationEventHandler schemaValidationEventHandler) { using (var stream = Assembly.Get

我有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);
        }
    }

为了确保您可以从代码中访问它,您需要确保文件的构建操作设置为Embedded Resource

为了进一步提供帮助,我们确实需要查看文件在解决方案中的位置,以便为您提供准确的答案,但同时,如果您确保参数路径遵循以下模式:

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

注意:如果没有方括号,请检查资源名称的格式:

DefaultNamespace[.Subfolder][...MoreSubfolers].FileName[.extension]
您需要将生成操作设置为项目文件属性中的嵌入资源

此外,还需要检查用于项目的命名空间:

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

        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

构成资源名称的不是程序集名称,而是项目的默认名称空间谢谢George。我按照你的建议解决了这个问题。非常感谢。