Uploaded image for project: 'Apache Cordova'
  1. Apache Cordova
  2. CB-11825

Windows dll file won't be copied as resource while adding custom plugin to a UWP project



    • Bug
    • Status: Closed
    • Critical
    • Resolution: Fixed
    • 6.3.1
    • 6.3.2
    • None
    • Windows10 UWP projects


      I have created a custom plugin which uses a Windows Runtime Component (e.g. "foo.winmd") file. In this winmd I have a referenced library class (e.g. "bar.dll").
      My plugin.xml looks like:

      <platform name="windows">
      <resource-file src="windows/windows10/bin/SayHelloLib.dll" target="plugins/com.plugin.test.myPlugin/SayHelloLib.dll" versions="<=0.0"/>
      <framework src="windows/windows10/bin/Plugin.Test.winmd"/>

      With Cordova 6.2.0 the resource file will be copied to the target place and if I add the plugin to a cordova project the winmd file will find it.
      With Cordova 6.3.1 the mentioned dll file won't be copied and I get FileNotFoundException (because it is not there).
      "Exception calling native with command :: SayHelloToName :: sayHello ::exception=WinRTError: The system cannot find the file specified.
      System.IO.FileNotFoundException: Could not load file or assembly 'SayHelloLib, Version=, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
      at Plugin.Test.TestPlugin.getName(String name)
      cordova.js (993,13)"

      I created a test package to easily reproduce this scenario. The test application can be downloaded from the external issue URL.

      • SayHelloLib: the library which is referred in the winmd (output of PluginProject solution)
      • PluginProject: contains the plugin proxy and the dll resource as cross referenced project (just for convenience)
      • MyPlugin: the custom plugin, contains the plugin .js and .xml files and windows specific resources from PluginProject solution
      • www: the index.html, it has to be copied to the www folder of the newly created Cordova project

      Repro steps:
      1) build PluginProject project on x64 platform
      2) copy built files:
      PluginProject\MyTestPlugin\windows\src\myPlugin_proxy.js -> MyPlugin\windows\src
      PluginProject\Plugin.Test\Plugin.Test.UWP\bin\x64\Debug\Plugin.Test.winmd -> MyPlugin\windows\windows10\bin
      PluginProject\Plugin.Test\Plugin.Test.UWP\bin\x64\Debug\SayHelloLib.dll -> MyPlugin\windows\windows10\bin
      3) cordova create Cordova631 cordova631.test.plugin Cordova631
      4) cd Cordova631
      5) cordova platform add windows
      6) cordova plugin add com.plugin.test.myPlugin --searchpath <path_to_MyPlugin_folder>
      7) copy file:
      www\index.html -> Cordova631\platforms\windows\www
      8) build the CordovaApp.sln on x64 platform
      9) start the application
      10) write something in the "Name" textbox
      11) click "Say hello" button




            Unassigned Unassigned
            skubovics Szabolcs Kubovics
            0 Vote for this issue
            3 Start watching this issue