2

埋め込みリソースのリソース Uri を取得するには?

以下のように、xsd ファイルに対して xml を検証する方法があります。このメソッドは、MSTest 内で使用されます。

     public static string Validate(string xml, string relativeXsdFilePath)
            {
                var schemas = new XmlSchemaSet();

// relativeXsdFilePath like 'TestData.Xsd.XsdFile1.xsd'
                var schemaUri = ResourceHelper.GetPath(relativeXsdFilePath);

                schemas.Add("", schemaUri);

                XDocument doc = XDocument.Load(new StringReader(xml));
                string msg = null;
                doc.Validate(schemas, (o, e) =>
                {
                    msg = e.Message;
                });
                return msg;
            }

そして、私はこれまでのところ成功していない以下の方法を実装しています!:

    public static string GetPath(string relativeFileName)
    {
        var assemblyName = new AssemblyName(Assembly.GetExecutingAssembly().FullName).Name;

         var resourceName = GetResourceName(relativeFileName);

// resource name would be like 'ProjectName.UnitTests.TestData.Xsd.profile.xsd'
        var result = string.Format("/{0};component/{1}", assemblyName, resourceName);

        return result;
    }

私のXSDはここにあります:

ProjectRoot
---TestData
------Xsd
---------XsdFile1.xsd
4

2 に答える 2

3

XmlReaderも受け入れることに気付いたので、誰かが同じ問題を抱えている場合の私の解決策は次のとおりです。

 public static XmlReader LoadAsXmlReader(string relativeFileName)
        {
            var result = LoadAsStream(relativeFileName);

            var xmlReader = new XmlTextReader(result);

            return xmlReader;
        }

        private static Stream LoadAsStream(string relativeFileName)
        {
            var resourceFileName = Assembly
                .GetExecutingAssembly()
                .GetManifestResourceNames()
                .FirstOrDefault(p => p.EndsWith(relativeFileName));


            return Assembly
                .GetExecutingAssembly()
                .GetManifestResourceStream(resourceFileName);
        }
于 2013-04-04T11:18:20.977 に答える
2

簡単な解決策として:

public static string GetPath(string relativeFileName)
{
    return Assembly.GetExecutingAssembly().GetManifestResourceNames().FirstOrDefault(x => x.EndsWith(relativeFileName));
}
于 2013-04-04T10:58:53.740 に答える