我正试着从JSIL开始。据我所知,我已经按照指示行事了。我有一个非常基本的带有代码的C#虚拟项目:
namespace TestLib
{
public class MagicType
{
public int Multiply(int x, int y)
{ // test instance method
return x * y;
}
public static int Add(int x, int y)
{// test static int method
return x + y;
}
}
}我用jsilc编译了它,并创建了一个网站,它与jsil脚本一起托管。我的html初始化如下:
<script type="text/javascript">
var jsilConfig = {
libraryRoot: '/js/jsil/',
scriptRoot: '/js/testlib/',
manifestRoot: '/js/testlib/',
manifests: ['TestLib.dll'] // gets as far as Loading '/js/testlib/TestLib.dll.manifest.js'...
// which is 200 / OK
};
var asm = null;
var runMain = function () { // doesn't get invoked
console.log('> main');
asm = JSIL.GetAssembly("TestLib", true); // (executed outside method) returns a stub with no content
console.log('< main');
};
</script>
<script src="/js/jsil/jsil.js"></script>但是..。我不能进入图书馆。控制台输出指示它正在加载:
Loading '/js/testlib/TestLib.dll.manifest.js'...这是一个200的OK。但是,我不能访问它。如果我跑:
var asm = JSIL.GetAssembly("TestLib", true);然后我把一个存根拿回图书馆,但里面没有任何东西。有一个asm.$typesByName,但它是一个空对象。我想要做的(看到它的工作)是调用Multiply和Add方法。
所以:我错过了什么?我的目的是托管一个可以通过js访问的转置库,据我所知,这是可能的。我就是不能让它起作用。我在这里上传了我的整个测试项目:https://github.com/mgravell/jsilfun
发布于 2017-05-26 20:36:13
缺少的部分是JSIL的浏览器层分两个阶段执行加载:引导程序(已成功加载并加载了清单)和浏览器支架(设置DOM接口并实际执行已加载的程序集)。这分两个阶段进行,因为很多事情都是异步的,在实际运行所有代码之前,您可能有理由自己加载其他程序集或执行其他工作。
浏览器支架公开了一个名为onLoad (是的,对不起)的函数,您可以调用该函数来执行第二阶段。这些示例都是用<body onload="onLoad()">或类似的方法来实现的,但是您可以任意调用它。
https://stackoverflow.com/questions/44209154
复制相似问题