1

是否可以将 Azure 上的 Code Numerics 仅用于标准偏差等一些计算,而不使用其分布式能力并绕过 HPC?我正在使用一些强大的数学和图表测试 MVC Web 角色,我添加了对 Cloud Numerics 程序集的引用,整个事情都在模拟器中工作(只是一些计算,没有分布式的东西)但是当我 delpoy 到 Azure 时,它​​报告了与云的依赖关系问题数字dll?我真的很感激一些建议。(我知道为此使用一些标准数学库会更好,但我真的需要知道这种方式是否可行)。我最初认为这可能是架构问题:整个项目是 AnyCpu(它只能是 AnyCpu 或 x64,因为 Azure 只允许这两个 confs)并且一些 CLoud Numerics 库是为 x64 编译的。

以下是异常详细信息:

Could not load file or assembly 'Microsoft.Numerics.DistributedDenseArrays.DLL' or one of its dependencies. The specified module could not be found.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Numerics.DistributedDenseArrays.DLL' or one of its dependencies. The specified module could not be found.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[FileNotFoundException: Could not load file or assembly 'Microsoft.Numerics.DistributedDenseArrays.DLL' or one of its dependencies. The specified module could not be found.]
   System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
   System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks) +567
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +192
   System.Reflection.Assembly.Load(String assemblyString) +35
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +123

[ConfigurationErrorsException: Could not load file or assembly 'Microsoft.Numerics.DistributedDenseArrays.DLL' or one of its dependencies. The specified module could not be found.]
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +11567856
   System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +485
   System.Web.Configuration.AssemblyInfo.get_AssemblyInternal() +79
   System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +337
   System.Web.Compilation.BuildManager.CallPreStartInitMethods() +280
   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +1167

[HttpException (0x80004005): Could not load file or assembly 'Microsoft.Numerics.DistributedDenseArrays.DLL' or one of its dependencies. The specified module could not be found.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11700592
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4868789

提到的 dll Microsoft.Numerics.DistributedDenseArrays 自然地作为副本包含在依赖遍历工具中所述的其他依赖项中。

4

3 回答 3

2

如果我偶然发现这类问题,我的第一个检查是引用的库是否具有属性 copy local = true。下一步是实施 en configure diagnosticts 如果您只部署到一个实例进行开发和测试,您可以使用 RDP 检查事件日志。

在先决条件一章中 阅读SQL Azure Labs 的 Microsoft 代号“Cloud Numerics”介绍,需要Microsoft Visual C++ 2010 SP1 Redistributable Package (x64)。这不是在 Windows Azure 提供的基本 VM 上实现的标准。可以在启动任务中将软件包安装在您的实例上。确保 msi 以静默模式启动(无需用户交互)。

米歇尔

于 2012-05-09T08:16:04.647 回答
2

我建议获取 Fusion 日志:

To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

然后你可以看到它试图从哪里加载文件并找出问题所在。如果您无法从中确定,请在此处发布这些详细信息,以便我们查看。

于 2012-05-09T13:55:15.467 回答
0

好的,问题解决了。

解决方案:有某事。Cloud Numerics 中缺少(Cloud Numerics 安装目录中的另一个本地库),更有趣的是:Web.config 中有一个额外的 DevExpress Printing.Core 库引用,而它没有作为对我的项目的引用添加。为什么更有趣?主要是因为我必须在我的 WebRoles 上使用 ProcMon 来确认这一事实,在我填空之后,我得到了一个更有用的错误,说明我的部署中缺少 Cloud Numerics 中的哪个精确库。

结论: ProcMon 是一个非常有用的工具,Azure VM 的 RDP 是无价的。

提示:如果您尝试在 Azure 上部署使用 CN 库的项目,请不要忘记将 Microsoft HPC Pack 中的 msmpi.dll 添加为 CopyAlways 内容,还要注意您引用的 msmpi.dll 类型(x32 或 x64 )。

谢谢你们,每一个答案都让我更接近解决方案。这也归功于 Cloud Numerics Lab 团队,尤其是 Roonie Hoogerwerf。

于 2012-05-11T11:49:11.103 回答