为什么在英特尔机器上编译的Inventor VB.NET DLL加载项可以在英特尔机器上工作,但不能在AMD上工作?

为什么在英特尔机器上编译的Inventor VB.NET DLL加载项可以在英特尔机器上工作,但不能在AMD上工作?,vb.net,intel,autodesk,amd-processor,Vb.net,Intel,Autodesk,Amd Processor,我正在visual studio 2019的VB.Net中不断开发inventor加载项, 我有多台不同版本的机器,但偶尔有一些机器不想加载加载项f.e。我现在拥有的当前版本适用于除一台AMD机器之外的所有机器 当我用相同的设置编译相同的项目时,AMD机器上的任何CPU构建选项都没有任何更改,它运行起来没有问题。当我在我的主开发机器上进行此操作时,它在另一台计算机上不工作 我用dependency walker检查了依赖项,没有收到任何错误消息 当我在调试模式下设置断点,并在“StandardA

我正在visual studio 2019的VB.Net中不断开发inventor加载项, 我有多台不同版本的机器,但偶尔有一些机器不想加载加载项f.e。我现在拥有的当前版本适用于除一台AMD机器之外的所有机器

当我用相同的设置编译相同的项目时,AMD机器上的任何CPU构建选项都没有任何更改,它运行起来没有问题。当我在我的主开发机器上进行此操作时,它在另一台计算机上不工作

我用dependency walker检查了依赖项,没有收到任何错误消息

当我在调试模式下设置断点,并在“StandardAddInServer.vb”文件中调用的第一个方法中调试dll编译时,它在英特尔计算机上编译时,在AMD计算机上不会到达。但反过来,它运行平稳

我不知道这可能是什么,我只是猜测这与AMD/Intel机器的不同有关。如能提供任何帮助,我们将不胜感激

Inventor 2018.3.7 Professional Build 287位于英特尔i7-4771机器Visual Studio社区2019 16.3.9、.NET 4.8.03761上

Inventor 2018 Professional build 112位于AMD Ryzen 7 3700X machine Visual Studio社区2019 16.7.2.NET 4.8.03752上


我们很乐意提供更多有用的信息。

好吧。。。。我想让这些机器在软件方面完全相同。。我开始在2018.3.1版上逐个安装inventor更新,加载项神奇地工作了。。。。因此,我希望我能帮助一些人,如果加载项自动卸载而没有任何错误,可能是autodesk inventors的错误…

您可以尝试使用以前的框架版本,如4.6.2。这应该可以解决问题。可能是Inventor的较新service Pack可以处理使用较新的.net版本创建的加载项。2018 Inventor发布时,.net 4.8不可用


艾伯特写的也是真的。如果dll的体系结构不符合主机进程的体系结构,则无法加载。64位进程只能使用64位dll,而32位进程只能处理32位dll。Studio不会将.Net项目编译成完全功能的机器代码(现在您也可以这样做),而只会编译成中间代码,最终由目标机器上的.Net framework编译。如果选择了anyCPU,则不必因为此行为而为不同的硬件提供不同的版本。

您使用的是任何CPU,还是将项目强制为给定的位大小

如果你不设置这个,把它放在任何CPU上?好的,如果您从VisualStudio启动应用程序(例如在目标机器上安装),那么应用程序将以x32位运行。 但是,如果从windows命令行(命令提示符)启动程序。 如果使用x64位命令提示符,则会得到一个x64位的进程内运行程序。如果您的任何外部.dll或库是x32(或未使用任何cpu编译),或者您使用任何非管理代码库(比如ghostscript或类似的)?然后您的程序将以x64位运行(或尝试运行)

但是,如果启动一个x32位的windows命令提示符(有两个,一个是x32,一个是x64)。因此,如果您从windows x32位提示符启动.net exe(您的程序),那么您的程序将作为x32位在进程中运行

所以,在这里要小心。使用VisualStudio中的任何CPU都会得到一个x32位的程序,包括调试。但是运行程序(在VS之外启动)并不总是x32位

上述行为似乎可以解释您在AMD机器上的问题。并不是您在该机器上安装了VS,而是使用VS来启动您的程序实际上迫使它以x32位运行

底线: 不要使用任何CPU,除非这正是您所需要的,并且您非常确定任何外部库也被编译为任何CPU,或者事实上任何外部库都不使用任何非托管代码

总而言之?我会将您的项目配置为强制始终按x86运行,这样您就不会因为代码不工作而感到意外

我非常怀疑AMD CPU是否是问题所在,安装VS之所以有效,是因为它迫使您的项目以x32而不是x64位运行。这与AMD毫无关系