无法使用 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 = '&copy; <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 &copy; Esri &mdash; 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 中,键入“名称”。