问题描述
我正在Visual Studio 2019中的VB.Net中持续开发发明家Addin, 我有不同版本的多台机器,但是偶尔有些机器只是不想加载Addin f.e.我目前使用的当前版本适用于除一台AMD机器以外的所有机器。
当我使用相同的设置编译相同的项目时,在具有任何cpu构建选项的AMD机器上根本没有任何更改,它可以毫无问题地运行。当我在主显影机上执行此操作时,该计算机就无法在另一台计算机上运行。
我用依赖项遍历器检查了依赖项,但没有收到任何错误消息。
当我在DEBUG模式下创建断点并在“ StandardAddInServer.vb”文件中调用的第一种方法中调试dll编译时,当它在Intel机器上进行编译时,它在AMD机器上无法到达。但是相反,它运行平稳。
我不知道这可能是什么,我只是推测这与AMD / Intel机器的差异有关。任何帮助将不胜感激,以寻求解决方案。
Inventor 2018.3.7 Professional Build 287位于Intel i7-4771计算机Visual Studio Community 2019 16.3.9,.NET 4.8.03761
Inventor 2018 Professional build 112位于AMD Ryzen 7 3700X计算机Visual Studio Community 2019 16.7.2 .NET 4.8.03752
我们将很乐意提供更多可能有用的信息。
解决方法
嗯....我让我们的机器在软件方面完全相同..我开始在2018.3.1版本中一个接一个地安装Inventor更新,Addin可以正常工作....所以我希望我能帮助别人,插件会自动卸载,没有任何错误,这可能是Autodesk发明者的错...
,您可以尝试使用以前的框架版本(如4.6.2)。那应该解决问题。可能是较新的Inventor Service Pack可以处理使用较新.net版本创建的插件。当2018 Inventor发布时,.net 4.8不可用。
阿尔伯特写的也是如此。如果dll的体系结构不符合主机进程的体系结构,则无法加载。一个64位进程只能使用64位dll,而一个32位进程只能处理32位dll。 Studio不会将.Net项目编译为功能完备的机器代码(如今您也可以这样做),而只能编译为中间代码,这些代码最终将由目标机器上的.net框架进行编译。如果选择了任何CPU,则由于这种行为,您不必为不同的硬件提供不同的版本。
,您正在使用ANY CPU,还是将项目强制为给定的位大小?
如果不设置此项,然后将其保留在任何CPU上?好吧,如果您从Visual Studio启动应用程序(例如在该目标计算机上安装),则该应用程序将以x32位运行。 但是,如果您从Windows命令行(命令提示符)启动程序。 好吧,如果您使用x64位命令提示符,则会得到一个正在运行的x64位-进程内程序。如果您的任何外部.dll或库都是x32(或未使用任何cpu编译),或者您使用任何非管理代码库(例如ghostscript或类似的库)?然后您的程序将以x64位运行(或尝试运行)。
但是,如果启动x32位Windows命令提示符(其中有两个-一个是x32,一个是x64)。因此,如果您从Windows x32位提示符下启动.net exe(您的程序),则您的程序将作为x32位在进程中运行。
所以,在这里要小心。使用Visual Studio中的任何CPU总是会得到一个x32位程序-包括调试程序。但是,运行程序(在VS外部启动)并不总是x32位。
以上行为似乎可以解释您在AMD机器上的问题/问题。不是在那台计算机上安装了VS,而是使用VS来启动程序,实际上是强迫它以x32位运行。
底线: 除非正是您所需要的,否则请不要使用任何CPU,并且您要确保将任何外部库也编译为任何CPU,或者实际上,任何外部库都不要使用任何非托管代码。
总而言之?我将您的项目配置为始终以x86强制运行,因此您不会对代码无法正常工作感到惊讶。
我非常怀疑AMD CPU是问题所在,而安装VS之所以起作用,是因为迫使您的项目以x32而非x64位运行。这里与AMD无关。