无法使用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…
-
获取资源名称,例如。
程序集objAssembly = Assembly.GetExecutingAssembly();
string [] strResourceNames = objAssembly.GetManifestResourceNames();
-
将资源名称传递给…
Stream strm = objAssembly.GetManifestResourceStream(strResourceNames);
现在你有stream,你可以做任何你想要的…
就我而言,这是完全不同的东西:
我的UWP应用程序在Debug和Releaseconfiguration中正确编译,但是GetManifestResourceStream返回Null只释放configuration。
问题是,在UWP构buildconfiguration文件(并且只有那里),设置“编译.NET本地工具链”已启用。 禁用后,GetManifestResourceStream按预期工作。