无法使用 GetManifestResourceStream 访问 xamarin 中的 html 文件
Not able to access html file in xamarin using GetManifestResourceStream
我想在 xamarin.forms uwp 项目中使用传单地图工具包。为此,我在 pcl 项目中创建了 index.html 文件。但是当我试图读取该文件时,它总是 returns null.
index.html
<!DOCTYPE html>
<html>
<head>
<title>LeafletMap</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<!--leaflet js-->
<script src="JS/leaflet.js"></script>
<!--leaflet css-->
<link rel="stylesheet" href="CSS/leaflet.css" />
<style>
html, body {
height: 100%;
margin: 0;
}
#map {
width: 600px;
height: 400px;
}
</style>
<style>
body {
padding: 0;
margin: 0;
}
#map {
height: 100%;
width: 100vw;
}
</style>
</head>
<body>
<div id='map'></div>
<script type="text/javascript">
var mbAttr = '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
mbUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
mbUrl2 = 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
mbAttr2 = 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community';
var OSM = L.tileLayer(mbUrl, { id: 'OSM', attribution: mbAttr }),
Sat = L.tileLayer(mbUrl2, { id: 'Sat', attribution: mbAttr2 });
var baseLayers = {
"OSM": OSM,
"Satellite": Sat
};
var markerGroup = new L.LayerGroup();
// Map initialization
var map = L.map('map',{
center: [-2.1319654, -79.9319396],
zoom:5,
layer: [OSM]
});
map.addLayer(markerGroup);
L.control.layers(baseLayers).addTo(map);
</script>
</body>
</html>
初始化地图
var source = new HtmlWebViewSource();
source.BaseUrl = DependencyService.Get<IBaseUrl>().Get();
var assembly = typeof(MainPage).GetTypeInfo().Assembly;
var stream = assembly.GetManifestResourceStream("LeafletMap.index.html");
StreamReader reader = null;
if (stream != null)
{
try
{
reader = new StreamReader(stream);
source.Html = reader.ReadToEnd();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"Exception \n - {ex.Message}");
}
finally
{
if (reader != null)
{
reader.Dispose();
}
}
webView.Source = source;
}
这一行总是returns null。
assembly.GetManifestResourceStream("LeafletMap.index.html");
有人知道如何在 xamarin.forms 中使用 leaflet mapkit 吗?
我参考了这个样本:https://github.com/osekom/LeafletMapXamarinForms。
它工作正常,因为它有旧版本 xamarin.forms 但它不适用于最新版本。
因为 LeafletMap
是程序集名称,所以它在原始版本中有效。据推测,您的项目有不同的名称,例如MyProject
.
改变
assembly.GetManifestResourceStream("LeafletMap.index.html");
至
assembly.GetManifestResourceStream("MyProject.index.html");
用您实际项目的程序集名称替换“MyProject”。默认情况下,这将与项目名称相同。如有疑问,请打开项目的“属性”、“应用程序”选项卡、“程序集名称:”。
如果还是不行,这里是查看程序集所有资源 ID 的方法:
var names = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
在此之后的一行上放置一个断点。然后在 VS“立即”window 中,键入“名称”。
我想在 xamarin.forms uwp 项目中使用传单地图工具包。为此,我在 pcl 项目中创建了 index.html 文件。但是当我试图读取该文件时,它总是 returns null.
index.html
<!DOCTYPE html>
<html>
<head>
<title>LeafletMap</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<!--leaflet js-->
<script src="JS/leaflet.js"></script>
<!--leaflet css-->
<link rel="stylesheet" href="CSS/leaflet.css" />
<style>
html, body {
height: 100%;
margin: 0;
}
#map {
width: 600px;
height: 400px;
}
</style>
<style>
body {
padding: 0;
margin: 0;
}
#map {
height: 100%;
width: 100vw;
}
</style>
</head>
<body>
<div id='map'></div>
<script type="text/javascript">
var mbAttr = '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
mbUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
mbUrl2 = 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
mbAttr2 = 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community';
var OSM = L.tileLayer(mbUrl, { id: 'OSM', attribution: mbAttr }),
Sat = L.tileLayer(mbUrl2, { id: 'Sat', attribution: mbAttr2 });
var baseLayers = {
"OSM": OSM,
"Satellite": Sat
};
var markerGroup = new L.LayerGroup();
// Map initialization
var map = L.map('map',{
center: [-2.1319654, -79.9319396],
zoom:5,
layer: [OSM]
});
map.addLayer(markerGroup);
L.control.layers(baseLayers).addTo(map);
</script>
</body>
</html>
初始化地图
var source = new HtmlWebViewSource();
source.BaseUrl = DependencyService.Get<IBaseUrl>().Get();
var assembly = typeof(MainPage).GetTypeInfo().Assembly;
var stream = assembly.GetManifestResourceStream("LeafletMap.index.html");
StreamReader reader = null;
if (stream != null)
{
try
{
reader = new StreamReader(stream);
source.Html = reader.ReadToEnd();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"Exception \n - {ex.Message}");
}
finally
{
if (reader != null)
{
reader.Dispose();
}
}
webView.Source = source;
}
这一行总是returns null。
assembly.GetManifestResourceStream("LeafletMap.index.html");
有人知道如何在 xamarin.forms 中使用 leaflet mapkit 吗?
我参考了这个样本:https://github.com/osekom/LeafletMapXamarinForms。
它工作正常,因为它有旧版本 xamarin.forms 但它不适用于最新版本。
因为 LeafletMap
是程序集名称,所以它在原始版本中有效。据推测,您的项目有不同的名称,例如MyProject
.
改变
assembly.GetManifestResourceStream("LeafletMap.index.html");
至
assembly.GetManifestResourceStream("MyProject.index.html");
用您实际项目的程序集名称替换“MyProject”。默认情况下,这将与项目名称相同。如有疑问,请打开项目的“属性”、“应用程序”选项卡、“程序集名称:”。
如果还是不行,这里是查看程序集所有资源 ID 的方法:
var names = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
在此之后的一行上放置一个断点。然后在 VS“立即”window 中,键入“名称”。