Amo*_*tir 47 .net c# configurationsection
我已经使用XSD创建了自定义配置部分.为了解析这个新模式之后的配置文件,我加载了资源(我的.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);
}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我的资源是:MonitoringConfiguration.xsd.而另一个部分类的名称空间(表示.xsd文件背后的代码)是MonitoringAPI.Configuration
.
问题出在这里:
Stream xsdStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(ConfigXsd);
Run Code Online (Sandbox Code Playgroud)
xsdStream为null,所以我猜想无法找到资源!但为什么?
谢谢
Phi*_*ert 94
资源的名称始终为:
<Base namespace>.<RelativePathInProject>.<FileName>
因此,如果您的资源位于"Resources/Xsd /"中,并且您的默认项目命名空间是"MonitoringAPI.Configuration",则资源名称为:
"MonitoringAPI.Configuration.Resources.Xsd.MonitoringConfiguration.xsd"
还要确保资源的构建操作设置为"嵌入式资源"
小智 52
获取嵌入资源实际名称的简便方法:
string[] resourceNames =
Assembly.GetExecutingAssembly().GetManifestResourceNames();
Run Code Online (Sandbox Code Playgroud)
然后只需检查resourceNames数组,您就会知道要传递给GetManifestResourceStream方法的内容.
Raj*_*dev 12
就我而言,
当您尝试通过访问该文件时GetManifestResourceStream()
.由于文件路径无效,您将收到错误,并且流将为null.
解:
右键单击已添加到解决方案中的文件,然后单击"属性".
选择Build Action
as Embedded Resource
.(而不是Content
- 默认情况下)
小智 5
只需在form1.resx下添加资源 - >添加现有项目
双击您在Resources folder.go下添加到资源的资源,然后选择"Embedded Resources"而不是"none".
然后尝试调试该行:
string[] resourceNames=Assembly.GetExecutingAssembly().GetManifestResourceNames();
Run Code Online (Sandbox Code Playgroud)
检查您添加的资源是否在数组中.然后从这个数组中精确复制资源名称,并尝试将名称放在您的代码上..工作正常!
归档时间: |
|
查看次数: |
45235 次 |
最近记录: |