无法使用GetManifestResourceStream()加载清单资源

我已经使用XSD创build了自定义configuration部分。 为了parsing这个新模式之后的configuration文件,我加载了这个资源(我的.xsd文件):

public partial class MonitoringConfiguration { public const string ConfigXsd = "MonitoringAPI.Configuration.MonitoringConfiguration.xsd"; public const string ConfigSchema = "urn:MonitoringConfiguration-1.0"; private static XmlSchemaSet xmlSchemaSet; static MonitoringConfiguration() { xmlSchemaSet = new XmlSchemaSet(); Stream xsdStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(ConfigXsd); XmlReader schemaReader = XmlReader.Create(xsdStream); xmlSchemaSet.Add(ConfigSchema, schemaReader); } } 

顺便说一句,我的资源是:MonitoringConfiguration.xsd。 其他部分类(代表.xsd文件后面的代码)的名称空间是MonitoringAPI.Configuration

问题在于:

  Stream xsdStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(ConfigXsd); 

xsdStream是空的,所以我猜资源找不到! 但为什么?

谢谢

资源的名称总是:

<Base namespace>.<RelativePathInProject>.<FileName>

因此,如果您的资源位于“Resources / Xsd /”,并且您的默认项目名称空间为“MonitoringAPI.Configuration”,则资源名称为:

"MonitoringAPI.Configuration.Resources.Xsd.MonitoringConfiguration.xsd"

还要确保资源的构build操作被设置为“embedded式资源”

简单而正确的方法来获取您的embedded式资源的实际名称:

 string[] resourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames(); 

然后简单地检查一下resourceNames数组,你就会知道传递给GetManifestResourceStream方法的是什么。

默认情况下,Visual Studio不会embeddedxsd文件,因此您必须确保xsd文件的“Build Action”属性设置为“Embedded Resource”以使其工作

就我而言,

当您尝试通过GetManifestResourceStream()访问该文件。 由于文件path无效,你将会得到一个错误,并且stream将是空的。

解:

右键单击已添加到解决scheme的文件,然后单击属性。

selectBuild Action作为Embedded Resource 。 (而不是Content – 默认情况下)

将操作属性设置为嵌入式资源

只需在form1.resx下添加资源 – >添加现有项目

双击资源folder.go中添加的资源到属性,然后select“Embedded Resources”而不是none。

然后尝试debugging这一行:

 string[] resourceNames=Assembly.GetExecutingAssembly().GetManifestResourceNames(); 

检查你添加的资源在数组中。 然后从这个数组中精确地复制资源名称,并尝试将名称放在代码中。

您可以通过传递如下所示的资源名称来获取资源stream…

  1. 获取资源名称,例如。

    程序集objAssembly = Assembly.GetExecutingAssembly();

    string [] strResourceNames = objAssembly.GetManifestResourceNames();

  2. 将资源名称传递给…

    Stream strm = objAssembly.GetManifestResourceStream(strResourceNames);

现在你有stream,你可以做任何你想要的…

就我而言,这是完全不同的东西:

我的UWP应用程序在Debug和Releaseconfiguration中正确编译,但是GetManifestResourceStream返回Null只释放configuration。

问题是,在UWP构buildconfiguration文件(并且只有那里),设置“编译.NET本地工具链”已启用。 禁用后,GetManifestResourceStream按预期工作。