- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下代码在 Windows 中运行良好,但是,当使用 Xamarin 并针对 iOS 时,GetManifestResourceStream() 返回 null。
Assembly assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream("CommunicationModel.XmlSchemas.DeviceCommon.xsd");
我已将文件“DeviceCommon.xsd”设置为嵌入式资源。不确定为什么它不返回有效流。
有人知道为什么这在使用 Xamarin 的 iOS 中不起作用吗?
更新:
好的,所以我按照评论中的建议将文件设置为 Content。
我现在可以检测到该文件,但无法打开它:
if (File.Exists("DeviceCommon.xsd"))
{
try
{
myStream = new FileStream("DeviceCommon.xsd", FileMode.Open);
}
....
}
当我运行上面的代码时,“File.Exists()”调用有效,但是当我尝试打开它时,出现以下异常:
Access to the path "/private/var/mobile/Applications/8BD48D1F-F8E8-4A80-A446-F807C6728805/UpnpUI_iOS.app/DeviceCommon.xsd" is denied.
有人知道我该如何解决这个问题吗???
谢谢,柯蒂斯
最佳答案
好的,我终于让它工作了。就我而言,我对 Windows .dll 和 Xamarin.iOS.dll 使用了相同的文件。尽管 namespace 相同,但我已将 .dll 项目命名为不同的名称。不幸的是,微软文档说他们使用 namespace 作为文件名的一部分。那不是真的。他们使用 .dll 名称作为命名空间的一部分。只是一点点不同,但会产生很大的不同。
所以,说到点子上.. 我将文件属性设置为:“嵌入式资源”和“不复制”。我需要处理的资源都是扩展名为 .xsd 的文件,所以我只是循环遍历所有资源名称并使用以 .xsd 结尾的那些。这样,无论他们使用什么操作系统,名称都是正确的,因为我以编程方式检索它并且没有对其进行硬编码:
Assembly assembly = Assembly.GetExecutingAssembly();
string[] resources = assembly.GetManifestResourceNames();
foreach (string resource in resources)
{
if(resource.EndsWith(".xsd"))
{
Stream stream = assembly.GetManifestResourceStream(resource);
if (stream != null)
{
XmlSchema schema = XmlSchema.Read(stream, null);
_schemas.Add(schema);
}
}
}
关于c# - Assembly.GetManifestResourceStream 不适用于 iOS 上的 Xamarin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18128681/
关于单元测试的快速问题。 我的应用程序有一些嵌入的 Xml 文件,它们经常被添加,有时被删除。我有一个方法,我想对其进行单元测试,其中包含该行 Assembly.GetExecutingAssembl
我在我的 wpf 应用程序中搜索了嵌入自定义拖放光标。我最终得到了一个 article我不知道建议的代码中有一行(用注释突出显示): private void textBlock2_MouseL
我正在处理 C# WinForms 应用程序。我需要嵌入一个 .dll 并尝试将此文件从资源“导出”到 HDD。 我正在使用默认表单资源... System.IO.Stream s = Assembl
我试图在我的应用程序的资源中嵌入一些文本文件,但是当我尝试使用 GetManifestResourceStream() 检索它时,我得到了 null。我已经尝试了所有这些名称组合: 程序名.Form1
我正在尝试使用 从资源中读取二进制文件 Stream input = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourc
我目前正在开发一个卡片 DLL,其中我需要将每张卡片的图像文件作为嵌入式资源,当前项目如下所示: 注意:卡片图像 (.png) 位于 Resources 文件夹中。 我一直在尝试的代码几乎是我能找到的
我正在使用/linkres: 编译器参数嵌入一个二进制文件,但是当我尝试加载它时: System.Reflection.Assembly myAssembly = System.Reflection.
这是一个 C# .NET 4.0 应用程序: 我正在嵌入一个文本文件作为资源,然后尝试在对话框中显示它: var assembly = Assembly.GetExecutingAssembl
我一直从 GetManifestResourceStream 收到空引用异常,我正在尝试将 Logo 图像添加到 Lightswitch 功能区,它应该可以正常工作.... 指的是 LR__ http
每当我处理Path-Resolution 的任务时,我总是感到困惑。关于所报告的问题,我有以下信息: 使用 ASP.NET MVC-5 应用程序 尝试通过以下代码访问字体文件,即MyriadPro-S
文档 GetManifestResourceStream不清楚对同一资源的多次调用。每次调用是否保证一个独立的流实例? 原因:知道是否应该担心并发使用。 最佳答案 internal unsafe St
我认为这是一种很好的做法,在使用 Assembly.GetManifestResourceStream 方法访问嵌入式程序集资源时,在完成返回的 Stream 后关闭它。然而,我刚刚在下面的文章中发现
我有一个 SQL 文件作为嵌入式资源添加到我的 VS.NET 2008 项目中。每当我使用以下代码读取文件内容时,返回的字符串总是以三个垃圾字符开头,然后是我期望的文本。我认为这与我使用的 Encod
我有以下情况: 我有一个名为MySolution的Solution,在这个解决方案中有一些项目,包括一个名为PdfReport的项目。在这个项目中有一个名为Shared 的文件夹,在这个文件夹中有一个
我在我的 ASP.NET MVC 应用程序中嵌入了一个资源(一个 XSD 文件)。现在,我想从代码中检索此文件。 查看 Assembly.GetManifestResourceStream() 的文档
我使用 XSD 创建了一个自定义配置部分。为了解析遵循这个新模式的配置文件,我用这个加载资源(我的 .xsd 文件): public partial class MonitoringConfigura
我正在开发一个使用 OpenGL/OpenTK 的 Xamarin 表单项目。我正在尝试使用 GetManifestResourceStream 加载着色器。无论我做什么,我都会得到空 代码正在从.S
我在项目的根文件夹下有一个证书。项目名称是 SingleSignOn,但我无法使用 GetManifestResourceStream 内置方法读取该方法。 源代码是 namespace Single
以下代码在 Windows 中运行良好,但是,当使用 Xamarin 并针对 iOS 时,GetManifestResourceStream() 返回 null。 Assembly assembly
使用 dotnet core:.NET Core SDK 版本:3.1.102 为什么以下返回 null ? typeof(MyClassName).GetTypeInfo().Assembly.Ge
我是一名优秀的程序员,十分优秀!